Comment 17 for bug 1447756

Revision history for this message
James Hunt (jamesodhunt) wrote : Re: segfault in log.c code causes phone reboot loops

Hi Ondrej,

Regarding #15, I'm not sure this is correct. As you say, when the job process terminates, job_process_terminated() gets called. This calls log_handle_unflushed() and that function calls log_read_watch(), which ultimately calls write(2). However, even if the write is successful before 'initctl notify-disk-writeable' gets called, if you look at log_handle_unflushed()...

 743 log_handle_unflushed (void *parent, Log *log)
 744 {
 745 NihListEntry *elem;
 746
 747 nih_assert (log);
 748 nih_assert (log->detached == 0);
 749
 750 log_read_watch (log);
 751
 752 if (! log->unflushed->len)
 753 return 1;

So, if the write is successful and log->unflushed->len becomes zero, the function returns 1 (meaning "log does not need to be added to the unflushed list") and crucially the log is not added to the unflushed list.