[launchd-changes] [23683] branches/PR-5898404/launchd/src

source_changes at macosforge.org source_changes at macosforge.org
Wed Aug 20 18:06:15 PDT 2008


Revision: 23683
          http://trac.macosforge.org/projects/launchd/changeset/23683
Author:   dsorresso at 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;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/launchd-changes/attachments/20080820/c7f9884f/attachment.html 


More information about the launchd-changes mailing list