Lines Matching refs:sp

75 sess_rele(sess_t *sp, boolean_t pidlock_held)  in sess_rele()  argument
79 mutex_enter(&sp->s_lock); in sess_rele()
81 ASSERT(sp->s_ref != 0); in sess_rele()
82 if (--sp->s_ref > 0) { in sess_rele()
83 mutex_exit(&sp->s_lock); in sess_rele()
86 ASSERT(sp->s_ref == 0); in sess_rele()
103 if (sp == &session0) in sess_rele()
107 ASSERT(sp->s_cnt == 0); in sess_rele()
110 ASSERT(!sp->s_exit); in sess_rele()
113 ASSERT(sp->s_vp == NULL); in sess_rele()
114 ASSERT(sp->s_dev == NODEV); in sess_rele()
118 PID_RELE(sp->s_sidp); in sess_rele()
122 mutex_destroy(&sp->s_lock); in sess_rele()
123 cv_destroy(&sp->s_cnt_cv); in sess_rele()
124 kmem_free(sp, sizeof (sess_t)); in sess_rele()
131 sess_t *sp; in tty_hold() local
139 sp = p->p_sessp; in tty_hold()
140 mutex_enter(&sp->s_lock); /* protect sp->* */ in tty_hold()
143 ASSERT((sp->s_vp == NULL) || in tty_hold()
144 MUTEX_NOT_HELD(&sp->s_vp->v_stream->sd_lock)); in tty_hold()
155 if (!sp->s_exit) in tty_hold()
159 sp->s_ref++; in tty_hold()
163 if (!cv_wait_sig(&sp->s_exit_cv, &sp->s_lock)) in tty_hold()
171 mutex_exit(&sp->s_lock); in tty_hold()
172 sess_rele(sp, B_FALSE); in tty_hold()
179 sp->s_cnt++; in tty_hold()
180 sp->s_ref++; in tty_hold()
181 mutex_exit(&sp->s_lock); in tty_hold()
183 return (sp); in tty_hold()
187 tty_rele(sess_t *sp) in tty_rele() argument
192 mutex_enter(&sp->s_lock); in tty_rele()
193 if ((--sp->s_cnt) == 0) in tty_rele()
194 cv_broadcast(&sp->s_cnt_cv); in tty_rele()
195 mutex_exit(&sp->s_lock); in tty_rele()
197 sess_rele(sp, B_FALSE); in tty_rele()
204 sess_t *sp, *old_sp; in sess_create() local
206 sp = kmem_zalloc(sizeof (sess_t), KM_SLEEP); in sess_create()
208 mutex_init(&sp->s_lock, NULL, MUTEX_DEFAULT, NULL); in sess_create()
209 cv_init(&sp->s_cnt_cv, NULL, CV_DEFAULT, NULL); in sess_create()
225 sp->s_sidp = p->p_pidp; in sess_create()
226 sp->s_ref = 1; in sess_create()
227 sp->s_dev = NODEV; in sess_create()
230 p->p_sessp = sp; in sess_create()
249 sess_ctty_clear(sess_t *sp, stdata_t *stp) in sess_ctty_clear() argument
258 MUTEX_HELD(&sp->s_lock)); in sess_ctty_clear()
261 sp->s_sighuped = B_FALSE; in sess_ctty_clear()
262 sp->s_dev = NODEV; in sess_ctty_clear()
263 sp->s_vp = NULL; in sess_ctty_clear()
264 sp->s_cred = NULL; in sess_ctty_clear()
272 sess_ctty_set(proc_t *p, sess_t *sp, stdata_t *stp) in sess_ctty_set() argument
278 MUTEX_HELD(&p->p_splock) && MUTEX_HELD(&sp->s_lock)); in sess_ctty_set()
284 PID_HOLD(sp->s_sidp); /* requires pidlock */ in sess_ctty_set()
285 PID_HOLD(sp->s_sidp); /* requires pidlock */ in sess_ctty_set()
288 sp->s_vp = makectty(stp->sd_vnode); in sess_ctty_set()
289 sp->s_dev = sp->s_vp->v_rdev; in sess_ctty_set()
290 sp->s_cred = crp; in sess_ctty_set()
294 stp->sd_sidp = sp->s_sidp; in sess_ctty_set()
295 stp->sd_pgidp = sp->s_sidp; in sess_ctty_set()
301 sess_t *sp; in strctty() local
320 sp = p->p_sessp; in strctty()
321 mutex_enter(&sp->s_lock); /* protects sp->* */ in strctty()
325 (p->p_pidp != sp->s_sidp) || /* we're not leader? */ in strctty()
326 (sp->s_vp != NULL)) { /* session has ctty? */ in strctty()
327 mutex_exit(&sp->s_lock); in strctty()
335 ASSERT(!sp->s_exit); in strctty()
342 if (sp->s_cnt == 0) in strctty()
346 sp->s_ref++; in strctty()
353 if (!cv_wait_sig(&sp->s_cnt_cv, &sp->s_lock)) in strctty()
355 mutex_exit(&sp->s_lock); in strctty()
356 sess_rele(sp, B_FALSE); in strctty()
363 sess_ctty_set(p, sp, stp); in strctty()
365 mutex_exit(&sp->s_lock); in strctty()
386 sess_t *sp; in freectty_lock() local
392 sp = p->p_sessp; in freectty_lock()
393 mutex_enter(&sp->s_lock); /* protect sp->* */ in freectty_lock()
395 if ((sp->s_sidp != p->p_pidp) || /* we're not leader? */ in freectty_lock()
396 (sp->s_vp == NULL)) { /* no ctty? */ in freectty_lock()
397 mutex_exit(&sp->s_lock); in freectty_lock()
403 vp = sp->s_vp; in freectty_lock()
404 stp = sp->s_vp->v_stream; in freectty_lock()
408 sp->s_exit = B_TRUE; in freectty_lock()
424 sp->s_ref++; /* hold the session structure */ in freectty_lock()
425 sp->s_cnt++; /* protect vp and stp */ in freectty_lock()
429 mutex_exit(&sp->s_lock); in freectty_lock()
437 mutex_enter(&sp->s_lock); /* protects sp->* */ in freectty_lock()
440 if (sp != p->p_sessp) { in freectty_lock()
449 mutex_exit(&sp->s_lock); in freectty_lock()
453 tty_rele(sp); in freectty_lock()
461 ASSERT(sp->s_sidp == p->p_pidp); /* we're the leader */ in freectty_lock()
462 ASSERT(sp->s_vp != NULL); /* a ctty exists */ in freectty_lock()
463 ASSERT(vp == sp->s_vp); in freectty_lock()
464 ASSERT(stp == sp->s_vp->v_stream); in freectty_lock()
468 if ((--(sp)->s_cnt) == 0) in freectty_lock()
469 cv_broadcast(&sp->s_cnt_cv); in freectty_lock()
470 sp->s_ref--; in freectty_lock()
471 ASSERT(sp->s_ref > 0); in freectty_lock()
475 *spp = sp; in freectty_lock()
489 freectty_signal(proc_t *p, sess_t *sp, stdata_t *stp, boolean_t at_exit) in freectty_signal() argument
493 MUTEX_HELD(&p->p_splock) && MUTEX_HELD(&sp->s_lock)); in freectty_signal()
496 if (sp->s_sighuped) in freectty_signal()
499 sp->s_sighuped = B_TRUE; in freectty_signal()
507 sp->s_ref++; /* hold the session structure */ in freectty_signal()
508 sp->s_cnt++; /* protect vp and stp */ in freectty_signal()
512 mutex_exit(&sp->s_lock); in freectty_signal()
527 tty_rele(sp); in freectty_signal()
539 sess_t *sp; in freectty() local
555 if (!freectty_lock(p, &sp, &vp, &stp, at_exit)) in freectty()
558 if (freectty_signal(p, sp, stp, at_exit)) { in freectty()
571 ASSERT(at_exit || !sp->s_exit); in freectty()
578 if (sp->s_cnt == 0) in freectty()
583 sp->s_ref++; in freectty()
607 cv_wait(&sp->s_cnt_cv, &sp->s_lock); in freectty()
608 mutex_exit(&sp->s_lock); in freectty()
612 if (!cv_wait_sig(&sp->s_cnt_cv, &sp->s_lock)) { in freectty()
616 mutex_exit(&sp->s_lock); in freectty()
617 sess_rele(sp, B_FALSE); in freectty()
622 ASSERT(sp->s_cnt == 0); in freectty()
625 cred = sp->s_cred; in freectty()
630 sess_ctty_clear(sp, stp); in freectty()
634 ASSERT(sp->s_exit); in freectty()
635 sp->s_exit = B_FALSE; in freectty()
636 cv_broadcast(&sp->s_exit_cv); in freectty()
640 mutex_exit(&sp->s_lock); in freectty()
683 sess_t *sp; in cttydev() local
687 sp = pp->p_sessp; in cttydev()
690 mutex_enter(&sp->s_lock); /* protects sp->* */ in cttydev()
691 if (sp->s_vp == NULL) in cttydev()
692 ASSERT(sp->s_dev == NODEV); in cttydev()
694 ASSERT(sp->s_dev != NODEV); in cttydev()
695 mutex_exit(&sp->s_lock); in cttydev()
698 dev = sp->s_dev; in cttydev()