+ ipc_importance_task_t new_task_imp = IIT_NULL;
+
+ new_task->task_imp_base = NULL;
+ if (!parent_task) return;
+
+ if (task_is_marked_importance_donor(parent_task)) {
+ new_task_imp = ipc_importance_for_task(new_task, FALSE);
+ assert(IIT_NULL != new_task_imp);
+ ipc_importance_task_mark_donor(new_task_imp, TRUE);
+ }
+ if (task_is_marked_live_importance_donor(parent_task)) {
+ if (IIT_NULL == new_task_imp)
+ new_task_imp = ipc_importance_for_task(new_task, FALSE);
+ assert(IIT_NULL != new_task_imp);
+ ipc_importance_task_mark_live_donor(new_task_imp, TRUE);
+ }
+ /* Do not inherit 'receiver' on fork, vfexec or true spawn */
+ if (task_is_exec_copy(new_task) &&
+ task_is_marked_importance_receiver(parent_task)) {
+ if (IIT_NULL == new_task_imp)
+ new_task_imp = ipc_importance_for_task(new_task, FALSE);
+ assert(IIT_NULL != new_task_imp);
+ ipc_importance_task_mark_receiver(new_task_imp, TRUE);
+ }
+ if (task_is_marked_importance_denap_receiver(parent_task)) {
+ if (IIT_NULL == new_task_imp)
+ new_task_imp = ipc_importance_for_task(new_task, FALSE);
+ assert(IIT_NULL != new_task_imp);
+ ipc_importance_task_mark_denap_receiver(new_task_imp, TRUE);
+ }
+ if (IIT_NULL != new_task_imp) {
+ assert(new_task->task_imp_base == new_task_imp);
+ ipc_importance_task_release(new_task_imp);
+ }
+#endif /* IMPORTANCE_INHERITANCE */
+}