On May 30, 10:33am, charles.cui1...@gmail.com (Charles Cui) wrote: -- Subject: Re: pthread library related
Looks good, but be careful with whitespace in general: @@ -316,7 +316,7 @@ ksem_create(lwp_t *l, const char *name, ksem_t **ksret, mode_t mode, u_int val) if (val > SEM_VALUE_MAX) { return EINVAL; } - + Why extra whitespace here. if (name != NULL) { len = strlen(name); if (len > SEM_MAX_NAMELEN) { @@ -333,6 +333,14 @@ ksem_create(lwp_t *l, const char *name, ksem_t **ksret, mode_t mode, u_int val) len = 0; } + mutex_enter(&ksem_lock); + if (l->l_proc->p_nsems >= SEM_NSEMS_MAX) { + mutex_exit(&ksem_lock); + return -1; + } + l->l_proc->p_nsems += 1; + mutex_exit(&ksem_lock); + Mixed tabs and spaces. Better use atomics. ks = kmem_zalloc(sizeof(ksem_t), KM_SLEEP); mutex_init(&ks->ks_lock, MUTEX_DEFAULT, IPL_NONE); cv_init(&ks->ks_cv, "psem"); @@ -347,6 +355,7 @@ ksem_create(lwp_t *l, const char *name, ksem_t **ksret, mode_t mode, u_int val) ks->ks_gid = kauth_cred_getegid(uc); atomic_inc_uint(&nsems_total); + *ksret = ks; return 0; } Avoid touching code that has nothing to do with your change. @@ -366,6 +375,10 @@ ksem_free(ksem_t *ks) kmem_free(ks, sizeof(ksem_t)); atomic_dec_uint(&nsems_total); + + mutex_enter(&ksem_lock); + curproc->p_nsems -= 1; + mutex_exit(&ksem_lock); Better use atomics } int