Playing 4 video files in a split screen not receiving an EOS in reverse playback

I have created a test app to run 4 video test files in a split screen (2x2). When I play the pipeline forward, from the beginning to the end, the EOS is received in the bus_callback(). When I playback in reverse from the end to the beginning, the EOS is received in the bus_callback(). However, when I play forward about a couple of minutes into it and then reverse playback to the beginning, I do not receive the EOS in the bus_callback(). Any idea what is wrong?

Here is the pipeline example:

compositor name=mix
sink_1::xpos=0 sink_1::ypos=0
sink_2::xpos=1920 sink_2::ypos=0
sink_3::xpos=0 sink_3::ypos=1080
sink_4::xpos=1920 sink_4::ypos=1080
! autovideosink
filesrc location=/home/user/bunny1920_1.mov ! qtdemux name=demux_1
demux_1.video_0 ! queue ! decodebin ! videoscale ! video/x-raw,width=1920,height=1080 ! mix.sink_1
filesrc location=/home/user/bunny1920_2.mov ! qtdemux name=demux_2
demux_2.video_0 ! queue ! decodebin ! videoscale ! video/x-raw,width=1920,height=1080 ! mix.sink_2
filesrc location=/home/user/bunny1920_3.mov ! qtdemux name=demux_3
demux_3.video_0 ! queue ! decodebin ! videoscale ! video/x-raw,width=1920,height=1080 ! mix.sink_3
filesrc location=/home/user/bunny1920_4.mov ! qtdemux name=demux_4
demux_4.video_0 ! queue ! decodebin ! videoscale ! video/x-raw,width=1920,height=1080 ! mix.sink_4

Here is the seek event.

/* Send seek event to change rate */
static void
send_seek_event (CustomData * data)
{
gint64 position;
GstEvent *seek_event;

/* Obtain the current position, needed for the seek event */
if (!gst_element_query_position (data->pipeline, GST_FORMAT_TIME, &position)) {
g_printerr (“Unable to retrieve current position.\n”);
return;
}

g_print(“Current position %ld\n”, position);

/* Create the seek event */
if (data->rate > 0) {
seek_event =
gst_event_new_seek (data->rate, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET,
position, GST_SEEK_TYPE_END, 0);
} else {
seek_event =
gst_event_new_seek (data->rate, GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE, GST_SEEK_TYPE_SET, 0,
GST_SEEK_TYPE_SET, position);
}

if (data->videosink == NULL) {
/* If we have not done so, obtain the sink through which we will send the seek events */
g_object_get (data->pipeline, “video-sink”, &data->videosink, NULL);
}

/* Send the event */
gst_element_send_event (data->videosink, seek_event);

g_print (“Current rate: %g\n”, data->rate);
}