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

Reply via email to