X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/8f6c56a50524aa785f7e596d52dddfb331e18961..4452a7af2eac33dbad800bcc91f2399d62c18f53:/bsd/kern/posix_sem.c?ds=inline diff --git a/bsd/kern/posix_sem.c b/bsd/kern/posix_sem.c index 1dcc200d2..1c00fa91a 100644 --- a/bsd/kern/posix_sem.c +++ b/bsd/kern/posix_sem.c @@ -58,6 +58,7 @@ #include #include #include +#include #include @@ -187,12 +188,10 @@ psem_lock_init( void ) { psx_sem_subsys_lck_grp_attr = lck_grp_attr_alloc_init(); - lck_grp_attr_setstat(psx_sem_subsys_lck_grp_attr); psx_sem_subsys_lck_grp = lck_grp_alloc_init("posix shared memory", psx_sem_subsys_lck_grp_attr); psx_sem_subsys_lck_attr = lck_attr_alloc_init(); - /* lck_attr_setdebug(psx_sem_subsys_lck_attr); */ lck_mtx_init(& psx_sem_subsys_mutex, psx_sem_subsys_lck_grp, psx_sem_subsys_lck_attr); } @@ -475,6 +474,8 @@ sem_open(struct proc *p, struct sem_open_args *uap, user_addr_t *retval) pinfo->psem_mode = cmode; pinfo->psem_uid = kauth_cred_getuid(kauth_cred_get()); pinfo->psem_gid = kauth_cred_get()->cr_gid; + bcopy(pnbuf, &pinfo->psem_name[0], PSEMNAMLEN); + pinfo->psem_name[PSEMNAMLEN]= 0; PSEM_SUBSYS_UNLOCK(); kret = semaphore_create(kernel_task, &pinfo->psem_semobject, SYNC_POLICY_FIFO, value); @@ -1033,3 +1034,35 @@ psem_kqfilter(__unused struct fileproc *fp, __unused struct knote *kn, return (ENOTSUP); } +int +fill_pseminfo(struct psemnode *pnode, struct psem_info * info) +{ + register struct pseminfo *pinfo; + struct stat *sb; + + PSEM_SUBSYS_LOCK(); + if ((pinfo = pnode->pinfo) == PSEMINFO_NULL){ + PSEM_SUBSYS_UNLOCK(); + return(EINVAL); + } + +#if 0 + if ((pinfo->psem_flags & PSEM_ALLOCATED) != PSEM_ALLOCATED) { + PSEM_SUBSYS_UNLOCK(); + return(EINVAL); + } +#endif + + sb = &info->psem_stat; + bzero(sb, sizeof(struct stat)); + + sb->st_mode = pinfo->psem_mode; + sb->st_uid = pinfo->psem_uid; + sb->st_gid = pinfo->psem_gid; + sb->st_size = pinfo->psem_usecount; + bcopy(&pinfo->psem_name[0], &info->psem_name[0], PSEMNAMLEN+1); + + PSEM_SUBSYS_UNLOCK(); + return(0); +} +