Revision: 23577 http://trac.macosforge.org/projects/launchd/changeset/23577 Author: zarzycki@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; } }
participants (1)
-
source_changes@macosforge.org