MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sys_ksem_destroy

Function sys_ksem_destroy

freebsd/kern/uipc_sem.c:917–947  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

915};
916#endif
917int
918sys_ksem_destroy(struct thread *td, struct ksem_destroy_args *uap)
919{
920 struct file *fp;
921 struct ksem *ks;
922 int error;
923
924 /* No capability rights required to close a semaphore. */
925 AUDIT_ARG_FD(uap->id);
926 error = ksem_get(td, uap->id, &cap_no_rights, &fp);
927 if (error)
928 return (error);
929 ks = fp->f_data;
930 if (!(ks->ks_flags & KS_ANONYMOUS)) {
931 fdrop(fp, td);
932 return (EINVAL);
933 }
934 mtx_lock(&sem_lock);
935 if (ks->ks_waiters != 0) {
936 mtx_unlock(&sem_lock);
937 error = EBUSY;
938 goto err;
939 }
940 ks->ks_flags |= KS_DEAD;
941 mtx_unlock(&sem_lock);
942
943 error = kern_close(td, uap->id);
944err:
945 fdrop(fp, td);
946 return (error);
947}
948
949static struct syscall_helper_data ksem_syscalls[] = {
950 SYSCALL_INIT_HELPER(ksem_init),

Callers

nothing calls this directly

Calls 4

ksem_getFunction · 0.85
kern_closeFunction · 0.85
mtx_lockFunction · 0.70
mtx_unlockFunction · 0.70

Tested by

no test coverage detected