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);
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
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);
}