Changeset 23539
- Timestamp:
- 2008-03-06 11:00:19 (7 months ago)
- Location:
- trunk/launchd/src
- Files:
-
- 4 modified
-
launchd_core_logic.c (modified) (5 diffs)
-
libbootstrap.c (modified) (1 diff)
-
libbootstrap_private.h (modified) (1 diff)
-
protocol_job.defs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/launchd/src/launchd_core_logic.c
r23538 r23539 141 141 unsigned int gen_num; 142 142 mach_port_name_t port; 143 unsigned int isActive:1, reset:1, recv:1, hide:1, kUNCServer:1, 144 per_user_hack:1, debug_on_close:1, per_pid:1, special_port_num:24; 143 unsigned int isActive:1, reset:1, recv:1, hide:1, 144 kUNCServer:1, per_user_hack:1, debug_on_close:1, per_pid:1, 145 delete_on_destruction:1, special_port_num:23; 145 146 const char name[0]; 146 147 }; … … 4889 4890 { 4890 4891 struct machservice *ms; 4892 job_t j; 4891 4893 4892 4894 LIST_FOREACH(ms, &port_hash[HASH_PORT(p)], port_hash_sle) { … … 4896 4898 } 4897 4899 4898 if (! ms) {4900 if (!jobmgr_assumes(root_jobmgr, ms != NULL)) { 4899 4901 return false; 4900 4902 } 4901 4903 4904 j = ms->job; 4905 4906 job_log(j, LOG_DEBUG, "Receive right returned to us: %s", ms->name); 4907 4902 4908 ms->isActive = false; 4903 4909 4904 if (ms->reset) { 4905 machservice_resetport(ms->job, ms); 4906 } 4907 4908 job_log(ms->job, LOG_DEBUG, "Receive right returned to us: %s", ms->name); 4909 job_dispatch(ms->job, false); 4910 if (ms->delete_on_destruction) { 4911 machservice_delete(j, ms, false); 4912 } else if (ms->reset) { 4913 machservice_resetport(j, ms); 4914 } 4915 4916 job_dispatch(j, false); 4910 4917 4911 4918 root_jobmgr = jobmgr_do_garbage_collection(root_jobmgr); … … 5902 5909 5903 5910 kern_return_t 5904 job_mig_check_in(job_t j, name_t servicename, mach_port_t *serviceportp) 5905 { 5911 job_mig_check_in2(job_t j, name_t servicename, mach_port_t *serviceportp, uint64_t flags) 5912 { 5913 bool per_pid_service = flags & BOOTSTRAP_PER_PID_SERVICE; 5914 struct ldcred *ldc = runtime_get_caller_creds(); 5906 5915 struct machservice *ms; 5907 struct ldcred *ldc = runtime_get_caller_creds();5908 5916 job_t jo; 5909 5917 … … 5912 5920 } 5913 5921 5914 ms = jobmgr_lookup_service(j->mgr, servicename, true,0);5922 ms = jobmgr_lookup_service(j->mgr, servicename, false, per_pid_service ? ldc->pid : 0); 5915 5923 5916 5924 if (ms == NULL) { 5917 5925 *serviceportp = MACH_PORT_NULL; 5918 ms = machservice_new(j, servicename, serviceportp, false); 5919 5920 if (unlikely(ms == NULL)) { 5926 5927 if (unlikely((ms = machservice_new(j, servicename, serviceportp, per_pid_service)) == NULL)) { 5921 5928 return BOOTSTRAP_NO_MEMORY; 5922 5929 } 5923 5930 5931 ms->delete_on_destruction = true; /* parity with bootstrap_register() */ 5924 5932 job_checkin(j); 5925 5933 -
trunk/launchd/src/libbootstrap.c
r23535 r23539 117 117 bootstrap_check_in(mach_port_t bp, name_t service_name, mach_port_t *sp) 118 118 { 119 return vproc_mig_check_in(bp, service_name, sp); 119 return vproc_mig_check_in2(bp, service_name, sp, 0); 120 } 121 122 kern_return_t 123 bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags) 124 { 125 return vproc_mig_check_in2(bp, service_name, sp, flags); 120 126 } 121 127 -
trunk/launchd/src/libbootstrap_private.h
r23489 r23539 36 36 kern_return_t bootstrap_look_up2(mach_port_t bp, name_t service_name, mach_port_t *sp, pid_t target_pid, uint64_t flags); 37 37 38 kern_return_t bootstrap_check_in2(mach_port_t bp, name_t service_name, mach_port_t *sp, uint64_t flags); 39 38 40 kern_return_t bootstrap_look_up_per_user(mach_port_t bp, name_t service_name, uid_t target_user, mach_port_t *sp); 39 41 -
trunk/launchd/src/protocol_job.defs
r23535 r23539 51 51 __flags : uint64_t); 52 52 53 routine check_in( 54 __bs_port : job_t; 55 __service_name : name_t; 56 out __service_port : mach_port_move_receive_t); 53 routine check_in2( 54 __bs_port : job_t; 55 __service_name : name_t; 56 out __service_port : mach_port_move_receive_t; 57 __flags : uint64_t); 57 58 58 59 routine register2(

