}
move_dump_data(cinfo.info_path, &cinfo);
}
- /* launch crash-popup only if the .debugmode file is exist*/
- if (debug_mode)
- launch_crash_popup(&cinfo);
struct NotifyParams notify_params = {
.prstatus_fd = cinfo.prstatus_fd,
send_notify(¬ify_params);
+ /* Release the core pipe as passed by kernel, allowing another
+ * coredump to be handled.
+ *
+ * Due to usage of core_pipe_limit there is limited number of
+ * crash-manager processes that kernel is going to invoke
+ * concurrently. As the next and last step is a _synchronous_
+ * call to crash-popup we close the descriptor here.
+ *
+ * Note: for VIP processes this will likely cause the system
+ * to reboot without showing popup.
+ */
+ close(STDIN_FILENO);
+
+ /* launch crash-popup only if the .debugmode file exists */
+ if (debug_mode)
+ launch_crash_popup(&cinfo);
+
exit:
close(cinfo.prstatus_fd);
free(crash_temp_path);