[launchd-changes] [23577] trunk/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Thu Mar 27 14:57:52 PDT 2008


Revision: 23577
          http://trac.macosforge.org/projects/launchd/changeset/23577
Author:   zarzycki at apple.com
Date:     2008-03-27 14:57:51 -0700 (Thu, 27 Mar 2008)

Log Message:
-----------
Refinements.

Modified Paths:
--------------
    trunk/launchd/src/launchd_core_logic.c
    trunk/launchd/src/libvproc.c

Modified: trunk/launchd/src/launchd_core_logic.c
===================================================================
--- trunk/launchd/src/launchd_core_logic.c	2008-03-27 21:42:31 UTC (rev 23576)
+++ trunk/launchd/src/launchd_core_logic.c	2008-03-27 21:57:51 UTC (rev 23577)
@@ -2231,6 +2231,7 @@
 
 	if (j->shmem) {
 		job_assumes(j, munmap(j->shmem, getpagesize()) == 0);
+		j->shmem = NULL;
 	}
 
 	if (unlikely(j->weird_bootstrap)) {
@@ -5446,6 +5447,11 @@
 		return BOOTSTRAP_NOT_PRIVILEGED;
 	}
 
+	if (unlikely(j->shmem)) {
+		job_log(j, LOG_ERR, "Tried to setup shared memory more than once");
+		return BOOTSTRAP_NOT_PRIVILEGED;
+	}
+
 	size_of_page_orig = size_of_page = getpagesize();
 
 	if (!job_assumes(j, j->shmem = mmap(NULL, size_of_page, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0))) {

Modified: trunk/launchd/src/libvproc.c
===================================================================
--- trunk/launchd/src/libvproc.c	2008-03-27 21:42:31 UTC (rev 23576)
+++ trunk/launchd/src/libvproc.c	2008-03-27 21:57:51 UTC (rev 23577)
@@ -54,6 +54,7 @@
 
 static int64_t cached_pid = -1;
 static struct vproc_shmem_s *vproc_shmem;
+static pthread_once_t shmem_inited = PTHREAD_ONCE_INIT;
 
 static void
 vproc_shmem_init(void)
@@ -94,8 +95,8 @@
 	int64_t newval;
 
 	if (unlikely(vproc_shmem == NULL)) {
-		vproc_shmem_init();
-		if (vproc_shmem == NULL) {
+		int po_r = pthread_once(&shmem_inited, vproc_shmem_init);
+		if (po_r != 0 || vproc_shmem == NULL) {
 			return;
 		}
 	}
@@ -147,8 +148,8 @@
 	int64_t newval;
 
 	if (unlikely(vproc_shmem == NULL)) {
-		vproc_shmem_init();
-		if (vproc_shmem == NULL) {
+		int po_r = pthread_once(&shmem_inited, vproc_shmem_init);
+		if (po_r != 0 || vproc_shmem == NULL) {
 			return NULL;
 		}
 	}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080327/9ac64da2/attachment.html 


More information about the launchd-changes mailing list