Module Name:    src
Committed By:   christos
Date:           Fri Jun 10 23:24:33 UTC 2016

Modified Files:
        src/include: limits.h
        src/lib/libc/gen: sysconf.3 sysconf.c
        src/sys/kern: uipc_sem.c
        src/sys/sys: proc.h unistd.h

Log Message:
GSoC 2016: Charles Cui: add SEM_NSEMS_MAX


To generate a diff of this commit:
cvs rdiff -u -r1.36 -r1.37 src/include/limits.h
cvs rdiff -u -r1.45 -r1.46 src/lib/libc/gen/sysconf.3
cvs rdiff -u -r1.37 -r1.38 src/lib/libc/gen/sysconf.c
cvs rdiff -u -r1.45 -r1.46 src/sys/kern/uipc_sem.c
cvs rdiff -u -r1.330 -r1.331 src/sys/sys/proc.h
cvs rdiff -u -r1.56 -r1.57 src/sys/sys/unistd.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/include/limits.h
diff -u src/include/limits.h:1.36 src/include/limits.h:1.37
--- src/include/limits.h:1.36	Tue Mar  8 00:02:55 2016
+++ src/include/limits.h	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: limits.h,v 1.36 2016/03/08 05:02:55 christos Exp $	*/
+/*	$NetBSD: limits.h,v 1.37 2016/06/10 23:24:33 christos Exp $	*/
 
 /*
  * Copyright (c) 1988, 1993
@@ -93,6 +93,7 @@
 #define	PTHREAD_THREADS_MAX		_POSIX_THREAD_THREADS_MAX
 
 #define	_POSIX_TIMER_MAX	32
+#define	_POSIX_SEM_NSEMS_MAX	256
 #define	_POSIX_TTY_NAME_MAX	9
 #define	_POSIX_TZNAME_MAX	6
 

Index: src/lib/libc/gen/sysconf.3
diff -u src/lib/libc/gen/sysconf.3:1.45 src/lib/libc/gen/sysconf.3:1.46
--- src/lib/libc/gen/sysconf.3:1.45	Fri Feb 26 12:13:01 2016
+++ src/lib/libc/gen/sysconf.3	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: sysconf.3,v 1.45 2016/02/26 17:13:01 christos Exp $
+.\"	$NetBSD: sysconf.3,v 1.46 2016/06/10 23:24:33 christos Exp $
 .\"
 .\" Copyright (c) 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -149,6 +149,9 @@ and its
 Semaphores
 option to which the system attempts to conform,
 otherwise \-1.
+.It Li _SC_SEM_NSEMS_MAX
+The maximum number of semaphores that one process can have open at a time,
+otherwise \-1.
 .It Li _SC_SHELL
 Return 1 if
 .Tn POSIX

Index: src/lib/libc/gen/sysconf.c
diff -u src/lib/libc/gen/sysconf.c:1.37 src/lib/libc/gen/sysconf.c:1.38
--- src/lib/libc/gen/sysconf.c:1.37	Fri Feb 26 12:13:01 2016
+++ src/lib/libc/gen/sysconf.c	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysconf.c,v 1.37 2016/02/26 17:13:01 christos Exp $	*/
+/*	$NetBSD: sysconf.c,v 1.38 2016/06/10 23:24:33 christos Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)sysconf.c	8.2 (Berkeley) 3/20/94";
 #else
-__RCSID("$NetBSD: sysconf.c,v 1.37 2016/02/26 17:13:01 christos Exp $");
+__RCSID("$NetBSD: sysconf.c,v 1.38 2016/06/10 23:24:33 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -420,6 +420,8 @@ yesno:		if (sysctl(mib, mib_len, &value,
 		return pathconf(_PATH_DEV, _PC_NAME_MAX);
 	case _SC_TIMER_MAX:
 		return _POSIX_TIMER_MAX;
+	case _SC_SEM_NSEMS_MAX:
+		return _POSIX_SEM_NSEMS_MAX;
 	default:
 		errno = EINVAL;
 		return (-1);

Index: src/sys/kern/uipc_sem.c
diff -u src/sys/kern/uipc_sem.c:1.45 src/sys/kern/uipc_sem.c:1.46
--- src/sys/kern/uipc_sem.c:1.45	Sun Apr 24 15:48:29 2016
+++ src/sys/kern/uipc_sem.c	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_sem.c,v 1.45 2016/04/24 19:48:29 dholland Exp $	*/
+/*	$NetBSD: uipc_sem.c,v 1.46 2016/06/10 23:24:33 christos Exp $	*/
 
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.45 2016/04/24 19:48:29 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_sem.c,v 1.46 2016/06/10 23:24:33 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -87,6 +87,7 @@ MODULE(MODULE_CLASS_MISC, ksem, NULL);
 
 #define	SEM_MAX_NAMELEN		14
 
+#define	SEM_NSEMS_MAX		256
 #define	KS_UNLINKED		0x01
 
 static kmutex_t		ksem_lock	__cacheline_aligned;
@@ -333,6 +334,11 @@ ksem_create(lwp_t *l, const char *name, 
 		len = 0;
 	}
 
+	if (atomic_inc_uint_nv(&l->l_proc->p_nsems) > SEM_NSEMS_MAX) {
+               atomic_dec_uint(&l->l_proc->p_nsems);
+		return -1;
+       }
+
 	ks = kmem_zalloc(sizeof(ksem_t), KM_SLEEP);
 	mutex_init(&ks->ks_lock, MUTEX_DEFAULT, IPL_NONE);
 	cv_init(&ks->ks_cv, "psem");
@@ -366,6 +372,7 @@ ksem_free(ksem_t *ks)
 	kmem_free(ks, sizeof(ksem_t));
 
 	atomic_dec_uint(&nsems_total);
+ 	atomic_dec_uint(&curproc->p_nsems);	
 }
 
 int

Index: src/sys/sys/proc.h
diff -u src/sys/sys/proc.h:1.330 src/sys/sys/proc.h:1.331
--- src/sys/sys/proc.h:1.330	Wed Apr 27 17:15:40 2016
+++ src/sys/sys/proc.h	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: proc.h,v 1.330 2016/04/27 21:15:40 christos Exp $	*/
+/*	$NetBSD: proc.h,v 1.331 2016/06/10 23:24:33 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -305,6 +305,7 @@ struct proc {
 	struct lcproc	*p_lwpctl;	/* p, a: _lwp_ctl() information */
 	pid_t		p_ppid;		/* :: cached parent pid */
 	pid_t 		p_fpid;		/* :: forked pid */
+	u_int		p_nsems;	/* Count of semaphores */
 
 /*
  * End area that is zeroed on creation

Index: src/sys/sys/unistd.h
diff -u src/sys/sys/unistd.h:1.56 src/sys/sys/unistd.h:1.57
--- src/sys/sys/unistd.h:1.56	Fri Feb 26 12:10:41 2016
+++ src/sys/sys/unistd.h	Fri Jun 10 19:24:33 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: unistd.h,v 1.56 2016/02/26 17:10:41 christos Exp $	*/
+/*	$NetBSD: unistd.h,v 1.57 2016/06/10 23:24:33 christos Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993
@@ -308,7 +308,7 @@
 #define	_SC_SHARED_MEMORY_OBJECTS	87
 
 #define	_SC_TIMER_MAX			88
-
+#define	_SC_SEM_NSEMS_MAX		89
 
 /* Extensions found in Solaris and Linux. */
 #define	_SC_PHYS_PAGES		121

Reply via email to