Lines Matching refs:sp

72 sess_rele(sess_t *sp, boolean_t pidlock_held)  in sess_rele()  argument
76 mutex_enter(&sp->s_lock); in sess_rele()
78 ASSERT(sp->s_ref != 0); in sess_rele()
79 if (--sp->s_ref > 0) { in sess_rele()
80 mutex_exit(&sp->s_lock); in sess_rele()
83 ASSERT(sp->s_ref == 0); in sess_rele()
100 if (sp == &session0) in sess_rele()
104 ASSERT(sp->s_cnt == 0); in sess_rele()
107 ASSERT(!sp->s_exit); in sess_rele()
110 ASSERT(sp->s_vp == NULL); in sess_rele()
111 ASSERT(sp->s_dev == NODEV); in sess_rele()
115 PID_RELE(sp->s_sidp); in sess_rele()
119 mutex_destroy(&sp->s_lock); in sess_rele()
120 cv_destroy(&sp->s_cnt_cv); in sess_rele()
121 kmem_free(sp, sizeof (sess_t)); in sess_rele()
128 sess_t *sp; in tty_hold() local
136 sp = p->p_sessp; in tty_hold()
137 mutex_enter(&sp->s_lock); /* protect sp->* */ in tty_hold()
140 ASSERT((sp->s_vp == NULL) || in tty_hold()
141 MUTEX_NOT_HELD(&sp->s_vp->v_stream->sd_lock)); in tty_hold()
152 if (!sp->s_exit) in tty_hold()
156 sp->s_ref++; in tty_hold()
160 if (!cv_wait_sig(&sp->s_exit_cv, &sp->s_lock)) in tty_hold()
168 mutex_exit(&sp->s_lock); in tty_hold()
169 sess_rele(sp, B_FALSE); in tty_hold()
176 sp->s_cnt++; in tty_hold()
177 sp->s_ref++; in tty_hold()
178 mutex_exit(&sp->s_lock); in tty_hold()
180 return (sp); in tty_hold()
184 tty_rele(sess_t *sp) in tty_rele() argument
189 mutex_enter(&sp->s_lock); in tty_rele()
190 if ((--sp->s_cnt) == 0) in tty_rele()
191 cv_broadcast(&sp->s_cnt_cv); in tty_rele()
192 mutex_exit(&sp->s_lock); in tty_rele()
194 sess_rele(sp, B_FALSE); in tty_rele()
201 sess_t *sp, *old_sp; in sess_create() local
203 sp = kmem_zalloc(sizeof (sess_t), KM_SLEEP); in sess_create()
205 mutex_init(&sp->s_lock, NULL, MUTEX_DEFAULT, NULL); in sess_create()
206 cv_init(&sp->s_cnt_cv, NULL, CV_DEFAULT, NULL); in sess_create()
222 sp->s_sidp = p->p_pidp; in sess_create()
223 sp->s_ref = 1; in sess_create()
224 sp->s_dev = NODEV; in sess_create()
227 p->p_sessp = sp; in sess_create()
246 sess_ctty_clear(sess_t *sp, stdata_t *stp) in sess_ctty_clear() argument
255 MUTEX_HELD(&sp->s_lock)); in sess_ctty_clear()
258 sp->s_sighuped = B_FALSE; in sess_ctty_clear()
259 sp->s_dev = NODEV; in sess_ctty_clear()
260 sp->s_vp = NULL; in sess_ctty_clear()
261 sp->s_cred = NULL; in sess_ctty_clear()
269 sess_ctty_set(proc_t *p, sess_t *sp, stdata_t *stp) in sess_ctty_set() argument
275 MUTEX_HELD(&p->p_splock) && MUTEX_HELD(&sp->s_lock)); in sess_ctty_set()
281 PID_HOLD(sp->s_sidp); /* requires pidlock */ in sess_ctty_set()
282 PID_HOLD(sp->s_sidp); /* requires pidlock */ in sess_ctty_set()
285 sp->s_vp = makectty(stp->sd_vnode); in sess_ctty_set()
286 sp->s_dev = sp->s_vp->v_rdev; in sess_ctty_set()
287 sp->s_cred = crp; in sess_ctty_set()
291 stp->sd_sidp = sp->s_sidp; in sess_ctty_set()
292 stp->sd_pgidp = sp->s_sidp; in sess_ctty_set()
298 sess_t *sp; in strctty() local
317 sp = p->p_sessp; in strctty()
318 mutex_enter(&sp->s_lock); /* protects sp->* */ in strctty()
322 (p->p_pidp != sp->s_sidp) || /* we're not leader? */ in strctty()
323 (sp->s_vp != NULL)) { /* session has ctty? */ in strctty()
324 mutex_exit(&sp->s_lock); in strctty()
332 ASSERT(!sp->s_exit); in strctty()
339 if (sp->s_cnt == 0) in strctty()
343 sp->s_ref++; in strctty()
350 if (!cv_wait_sig(&sp->s_cnt_cv, &sp->s_lock)) in strctty()
352 mutex_exit(&sp->s_lock); in strctty()
353 sess_rele(sp, B_FALSE); in strctty()
360 sess_ctty_set(p, sp, stp); in strctty()
362 mutex_exit(&sp->s_lock); in strctty()
383 sess_t *sp; in freectty_lock() local
389 sp = p->p_sessp; in freectty_lock()
390 mutex_enter(&sp->s_lock); /* protect sp->* */ in freectty_lock()
392 if ((sp->s_sidp != p->p_pidp) || /* we're not leader? */ in freectty_lock()
393 (sp->s_vp == NULL)) { /* no ctty? */ in freectty_lock()
394 mutex_exit(&sp->s_lock); in freectty_lock()
400 vp = sp->s_vp; in freectty_lock()
401 stp = sp->s_vp->v_stream; in freectty_lock()
405 sp->s_exit = B_TRUE; in freectty_lock()
421 sp->s_ref++; /* hold the session structure */ in freectty_lock()
422 sp->s_cnt++; /* protect vp and stp */ in freectty_lock()
426 mutex_exit(&sp->s_lock); in freectty_lock()
434 mutex_enter(&sp->s_lock); /* protects sp->* */ in freectty_lock()
437 if (sp != p->p_sessp) { in freectty_lock()
446 mutex_exit(&sp->s_lock); in freectty_lock()
450 tty_rele(sp); in freectty_lock()
458 ASSERT(sp->s_sidp == p->p_pidp); /* we're the leader */ in freectty_lock()
459 ASSERT(sp->s_vp != NULL); /* a ctty exists */ in freectty_lock()
460 ASSERT(vp == sp->s_vp); in freectty_lock()
461 ASSERT(stp == sp->s_vp->v_stream); in freectty_lock()
465 if ((--(sp)->s_cnt) == 0) in freectty_lock()
466 cv_broadcast(&sp->s_cnt_cv); in freectty_lock()
467 sp->s_ref--; in freectty_lock()
468 ASSERT(sp->s_ref > 0); in freectty_lock()
472 *spp = sp; in freectty_lock()
486 freectty_signal(proc_t *p, sess_t *sp, stdata_t *stp, boolean_t at_exit) in freectty_signal() argument
490 MUTEX_HELD(&p->p_splock) && MUTEX_HELD(&sp->s_lock)); in freectty_signal()
493 if (sp->s_sighuped) in freectty_signal()
496 sp->s_sighuped = B_TRUE; in freectty_signal()
504 sp->s_ref++; /* hold the session structure */ in freectty_signal()
505 sp->s_cnt++; /* protect vp and stp */ in freectty_signal()
509 mutex_exit(&sp->s_lock); in freectty_signal()
524 tty_rele(sp); in freectty_signal()
536 sess_t *sp; in freectty() local
552 if (!freectty_lock(p, &sp, &vp, &stp, at_exit)) in freectty()
555 if (freectty_signal(p, sp, stp, at_exit)) { in freectty()
568 ASSERT(at_exit || !sp->s_exit); in freectty()
575 if (sp->s_cnt == 0) in freectty()
580 sp->s_ref++; in freectty()
604 cv_wait(&sp->s_cnt_cv, &sp->s_lock); in freectty()
605 mutex_exit(&sp->s_lock); in freectty()
609 if (!cv_wait_sig(&sp->s_cnt_cv, &sp->s_lock)) { in freectty()
613 mutex_exit(&sp->s_lock); in freectty()
614 sess_rele(sp, B_FALSE); in freectty()
619 ASSERT(sp->s_cnt == 0); in freectty()
622 cred = sp->s_cred; in freectty()
627 sess_ctty_clear(sp, stp); in freectty()
631 ASSERT(sp->s_exit); in freectty()
632 sp->s_exit = B_FALSE; in freectty()
633 cv_broadcast(&sp->s_exit_cv); in freectty()
637 mutex_exit(&sp->s_lock); in freectty()
680 sess_t *sp; in cttydev() local
684 sp = pp->p_sessp; in cttydev()
687 mutex_enter(&sp->s_lock); /* protects sp->* */ in cttydev()
688 if (sp->s_vp == NULL) in cttydev()
689 ASSERT(sp->s_dev == NODEV); in cttydev()
691 ASSERT(sp->s_dev != NODEV); in cttydev()
692 mutex_exit(&sp->s_lock); in cttydev()
695 dev = sp->s_dev; in cttydev()