/*---------------------------------------------------------------------- | NPT_SelectableMessageQueue::PumpMessage +---------------------------------------------------------------------*/ NPT_Result NPT_SelectableMessageQueue::PumpMessage(bool blocking) { NPT_Result result = NPT_SimpleMessageQueue::PumpMessage(blocking); if (NPT_SUCCEEDED(result)) { // flush the event FlushEvent(); } return result; }
static void ProcessOpenFiles(void) /*merge all opened files to fpout (that is stdout or outfile or a tempfile), and clean up*/ { int i; for (i = 0; i < num_infiles; i++) { /* read first logged event from all opened files */ if (!GetEvent(fp_list_in[i], EventList[i])) { /* EOF or read error (e.g. file contained only one log event) */ fclose(fp_list_in[i]); fp_list_in[i] = NULL; } } for ( ; ; ) { /* find the earliest timestamp */ int min_index = -1; for (i = 0; i < num_infiles; i++) { if (!EventList[i]->ignore && (min_index < 0 || EventCmp(EventList[min_index], EventList[i]) > 0)) min_index = i; } if (min_index < 0) break; /* no more events */ FlushEvent(EventList[min_index]); if (fp_list_in[min_index] != NULL) { /* read the next event from that file */ EventList[min_index]->wrap = 0; if (!GetEvent(fp_list_in[min_index], EventList[min_index])) { /*EOF or read error*/ fclose(fp_list_in[min_index]); fp_list_in[min_index] = NULL; } if (!infiles_processed && EventList[min_index]->wrap > 0) { fprintf(stderr,"%s: warning: timestamp is in wrong order " "in file %s line %ld\n", progname, name_list_in[min_index + start_file], EventList[min_index]->start_line); } } } for (i = 0; i < num_infiles; i++) { if (fp_list_in[i] != NULL) fclose(fp_list_in[i]); } Free(fp_list_in); fp_list_in = NULL; }