process_t *process = data;
process_unix_t *unix_process = process_get_unix_process(process);
- /* Notify our process. */
- process_notify_event_exit(process, status);
-
/* Remove our waitpid callback. */
clear_waitpid_callback(unix_process->waitpid);
unix_process->waitpid = NULL;
+
+ /* Notify our process. */
+ process_notify_event_exit(process, status);
+
+ /* Make sure you don't modify the process after we have called
+ * process_notify_event_exit() on it, to allow users to process_free() it in
+ * the exit callback. */
}
/** This function sets the file descriptor in the <b>handle</b> as non-blocking
tor_assert(data == NULL);
log_debug(LD_PROCESS, "Windows Process I/O timer ticked");
+
+ /* Move the process into an alertable state. */
+ process_win32_trigger_completion_callbacks();
+
+ /* Check if our processes are still alive. */
const smartlist_t *processes = process_get_all_processes();
SMARTLIST_FOREACH(processes, process_t *, p,
process_win32_timer_test_process(p));
-
- process_win32_trigger_completion_callbacks();
}
/** Test whether a given process is still alive. Notify the Process subsystem