+ /* Replace heap entries until EOF for each stream (heap empty) */
+ for (;;) {
+ struct ctf_file_stream *file_stream, *removed;
+
+ file_stream = heap_maximum(tin->stream_heap);
+ if (!file_stream) {
+ /* end of file for all streams */
+ ret = 0;
+ break;
+ }
+ ret = sout->parent.event_cb(&sout->parent, &file_stream->parent);
+ if (ret) {
+ fprintf(stdout, "[error] Writing event failed.\n");
+ goto end;
+ }
+ ret = read_event(file_stream);
+ if (ret == EOF) {
+ removed = heap_remove(tin->stream_heap);
+ assert(removed == file_stream);
+ ret = 0;
+ continue;
+ } else if (ret)
+ goto end;
+ /* Reinsert the file stream into the heap, and rebalance. */
+ removed = heap_replace_max(tin->stream_heap, file_stream);
+ assert(removed == file_stream);
+ }