]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/task_policy.c
xnu-3789.51.2.tar.gz
[apple/xnu.git] / osfmk / kern / task_policy.c
index 6d9f28919addda4bfeb4ce97446d475eba012fd7..2ac70855de489bdb310afc05301cc2a2087b4f80 100644 (file)
@@ -664,7 +664,8 @@ task_policy_create(task_t task, task_t parent_task)
        task->requested_policy.trp_terminated       = parent_task->requested_policy.trp_terminated;
        task->requested_policy.trp_qos_clamp        = parent_task->requested_policy.trp_qos_clamp;
 
-       if (task->requested_policy.trp_apptype == TASK_APPTYPE_DAEMON_ADAPTIVE) {
+       if (task->requested_policy.trp_apptype == TASK_APPTYPE_DAEMON_ADAPTIVE && !task_is_exec_copy(task)) {
+               /* Do not update the apptype for exec copy task */
                if (parent_task->requested_policy.trp_boosted) {
                        task->requested_policy.trp_apptype = TASK_APPTYPE_DAEMON_INTERACTIVE;
                        task_importance_mark_donor(task, TRUE);
@@ -1834,7 +1835,21 @@ proc_set_task_spawnpolicy(task_t task, int apptype, int qos_clamp, int role,
                                  task_is_importance_receiver(task), 0);
 }
 
-extern task_t bsd_init_task;
+/*
+ * Inherit task role across exec
+ */
+void
+proc_inherit_task_role(task_t new_task,
+                       task_t old_task)
+{
+       int role;
+
+       /* inherit the role from old task to new task */
+       role = proc_get_task_policy(old_task, TASK_POLICY_ATTRIBUTE, TASK_POLICY_ROLE);
+       proc_set_task_policy(new_task, TASK_POLICY_ATTRIBUTE, TASK_POLICY_ROLE, role);
+}
+
+extern void *initproc;
 
 /*
  * Compute the default main thread qos for a task
@@ -1863,7 +1878,7 @@ task_compute_main_thread_qos(task_t task)
                        break;
        }
 
-       if (task == bsd_init_task) {
+       if (task->bsd_info == initproc) {
                /* PID 1 gets a special case */
                primordial_qos = MAX(primordial_qos, THREAD_QOS_USER_INITIATED);
        }