Lines Matching defs:sigio

108 static MALLOC_DEFINE(M_SIGIO, "sigio", "sigio structures");
188 struct mtx sigio_lock; /* mtx to protect pointers to sigio */
903 * If sigio is on the list associated with a process or process group,
904 * disable signalling from the device, remove sigio from the list and
905 * free sigio.
908 funsetown(struct sigio **sigiop)
910 struct sigio *sigio;
913 sigio = *sigiop;
914 if (sigio == NULL) {
918 *(sigio->sio_myref) = NULL;
919 if ((sigio)->sio_pgid < 0) {
920 struct pgrp *pg = (sigio)->sio_pgrp;
922 SLIST_REMOVE(&sigio->sio_pgrp->pg_sigiolst, sigio,
923 sigio, sio_pgsigio);
926 struct proc *p = (sigio)->sio_proc;
928 SLIST_REMOVE(&sigio->sio_proc->p_sigiolst, sigio,
929 sigio, sio_pgsigio);
933 crfree(sigio->sio_ucred);
934 free(sigio, M_SIGIO);
938 * Free a list of sigio structures.
948 struct sigio *sigio;
950 sigio = SLIST_FIRST(sigiolst);
951 if (sigio == NULL)
960 if (sigio->sio_pgid < 0) {
961 pg = sigio->sio_pgrp;
963 } else /* if (sigio->sio_pgid > 0) */ {
964 p = sigio->sio_proc;
969 while ((sigio = SLIST_FIRST(sigiolst)) != NULL) {
970 *(sigio->sio_myref) = NULL;
972 KASSERT(sigio->sio_pgid < 0,
973 ("Proc sigio in pgrp sigio list"));
974 KASSERT(sigio->sio_pgrp == pg,
975 ("Bogus pgrp in sigio list"));
977 SLIST_REMOVE(&pg->pg_sigiolst, sigio, sigio,
981 KASSERT(sigio->sio_pgid > 0,
982 ("Pgrp sigio in proc sigio list"));
983 KASSERT(sigio->sio_proc == p,
984 ("Bogus proc in sigio list"));
986 SLIST_REMOVE(&p->p_sigiolst, sigio, sigio,
991 crfree(sigio->sio_ucred);
992 free(sigio, M_SIGIO);
1001 * After permission checking, add a sigio structure to the sigio list for
1005 fsetown(pid_t pgid, struct sigio **sigiop)
1009 struct sigio *sigio;
1019 /* Allocate and fill in the new sigio out of locks. */
1020 sigio = malloc(sizeof(struct sigio), M_SIGIO, M_WAITOK);
1021 sigio->sio_pgid = pgid;
1022 sigio->sio_ucred = crhold(curthread->td_ucred);
1023 sigio->sio_myref = sigiop;
1084 SLIST_INSERT_HEAD(&proc->p_sigiolst, sigio, sio_pgsigio);
1085 sigio->sio_proc = proc;
1089 SLIST_INSERT_HEAD(&pgrp->pg_sigiolst, sigio, sio_pgsigio);
1090 sigio->sio_pgrp = pgrp;
1095 *sigiop = sigio;
1101 crfree(sigio->sio_ucred);
1102 free(sigio, M_SIGIO);
1111 struct sigio **sigiop;
3872 mtx_init(&sigio_lock, "sigio lock", NULL, MTX_DEF);