Revision: 23683 http://trac.macosforge.org/projects/launchd/changeset/23683 Author: dsorresso@apple.com Date: 2008-08-20 18:06:14 -0700 (Wed, 20 Aug 2008) Log Message: ----------- Rolled transaction SPI into vproc_swap_integer(). Modified Paths: -------------- branches/PR-5898404/launchd/src/launchd_core_logic.c branches/PR-5898404/launchd/src/libvproc.c branches/PR-5898404/launchd/src/libvproc_private.h branches/PR-5898404/launchd/src/protocol_job.defs Modified: branches/PR-5898404/launchd/src/launchd_core_logic.c =================================================================== --- branches/PR-5898404/launchd/src/launchd_core_logic.c 2008-08-20 08:31:44 UTC (rev 23682) +++ branches/PR-5898404/launchd/src/launchd_core_logic.c 2008-08-21 01:06:14 UTC (rev 23683) @@ -6017,6 +6017,10 @@ *outval = oldmask; umask(oldmask); break; + case VPROC_GSK_TRANSACTIONS_ENABLED: + job_log(j, LOG_DEBUG, "Reading transaction model status."); + *outval = j->kill_via_shmem; + break; case 0: *outval = 0; break; @@ -6081,6 +6085,15 @@ umask((mode_t) inval); } break; + case VPROC_GSK_TRANSACTIONS_ENABLED: + if( !job_assumes(j, inval != 0) ) { + job_log(j, LOG_WARNING, "Attempt to unregister from transaction model. This is not supported."); + kr = 1; + } else { + job_log(j, LOG_DEBUG, "Now participating in transaction model."); + j->kill_via_shmem = (bool)inval; + job_log(j, LOG_DEBUG, "j->kill_via_shmem = %s", j->kill_via_shmem ? "YES" : "NO"); + } case 0: break; default: @@ -6424,20 +6437,6 @@ } kern_return_t -job_mig_transaction_register(job_t job, uint64_t flags __attribute__((unused))) -{ - job_log(job, LOG_DEBUG, "Request to be opted into transaction model."); - - if( !job->kill_via_shmem ) { - job->kill_via_shmem = 1; - } else { - job_log(job, LOG_NOTICE, "Attempt to re-register for transaction model."); - } - - return KERN_SUCCESS; -} - -kern_return_t job_mig_look_up2(job_t j, mach_port_t srp, name_t servicename, mach_port_t *serviceportp, pid_t target_pid, uint64_t flags) { struct machservice *ms; Modified: branches/PR-5898404/launchd/src/libvproc.c =================================================================== --- branches/PR-5898404/launchd/src/libvproc.c 2008-08-20 08:31:44 UTC (rev 23682) +++ branches/PR-5898404/launchd/src/libvproc.c 2008-08-21 01:06:14 UTC (rev 23683) @@ -56,6 +56,7 @@ static int64_t cached_pid = -1; static struct vproc_shmem_s *vproc_shmem; static pthread_once_t shmem_inited = PTHREAD_ONCE_INIT; +static uint64_t s_cached_transactions_enabled = 0; static void vproc_shmem_init(void) @@ -181,18 +182,6 @@ } } -vproc_err_t _vproc_transaction_optin(void) -{ - if (unlikely(vproc_shmem == NULL)) { - int po_r = pthread_once(&shmem_inited, vproc_shmem_init); - if (po_r != 0 || vproc_shmem == NULL) { - return; - } - } - - return vproc_mig_transaction_register(bootstrap_port, 0)); -} - vproc_standby_t vproc_standby_begin(vproc_t vp __attribute__((unused))) { @@ -655,6 +644,21 @@ return NULL; } break; + case VPROC_GSK_TRANSACTIONS_ENABLED: + /* Shared memory region is required for transactions. */ + if (unlikely(vproc_shmem == NULL)) { + int po_r = pthread_once(&shmem_inited, vproc_shmem_init); + if (po_r != 0 || vproc_shmem == NULL) { + *outval = 0; + return NULL; + } + } + + if( s_cached_transactions_enabled && outval ) { + *outval = s_cached_transactions_enabled; + return NULL; + } + break; default: break; } @@ -667,6 +671,10 @@ case VPROC_GSK_IS_MANAGED: cached_is_managed = outval ? *outval : dummyval; break; + case VPROC_GSK_TRANSACTIONS_ENABLED: + /* Once you're in the transaction model, you're in for good. Like the Mafia. */ + s_cached_transactions_enabled = 1; + break; default: break; } Modified: branches/PR-5898404/launchd/src/libvproc_private.h =================================================================== --- branches/PR-5898404/launchd/src/libvproc_private.h 2008-08-20 08:31:44 UTC (rev 23682) +++ branches/PR-5898404/launchd/src/libvproc_private.h 2008-08-21 01:06:14 UTC (rev 23683) @@ -51,6 +51,7 @@ VPROC_GSK_GLOBAL_LOG_MASK, VPROC_GSK_GLOBAL_UMASK, VPROC_GSK_ABANDON_PROCESS_GROUP, + VPROC_GSK_TRANSACTIONS_ENABLED } vproc_gsk_t; vproc_err_t vproc_swap_integer(vproc_t vp, vproc_gsk_t key, int64_t *inval, int64_t *outval); @@ -87,7 +88,6 @@ void _vproc_transaction_try_exit(int status); void _vproc_transaction_begin(void); void _vproc_transaction_end(void); -vproc_err_t _vproc_transaction_optin(void); size_t _vproc_transaction_count(void); Modified: branches/PR-5898404/launchd/src/protocol_job.defs =================================================================== --- branches/PR-5898404/launchd/src/protocol_job.defs 2008-08-20 08:31:44 UTC (rev 23682) +++ branches/PR-5898404/launchd/src/protocol_job.defs 2008-08-21 01:06:14 UTC (rev 23683) @@ -62,10 +62,6 @@ __service_port : mach_port_t; __flags : uint64_t); -routine transaction_optin( - __bs_port : job_t; - __flags : uint64_t); - routine look_up2( __bs_port : job_t; sreplyport __rport : mach_port_make_send_once_t;
participants (1)
-
source_changes@macosforge.org