From 77b978ed26c00c59bb77a41a26ee7af12a5d3345 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 2 Sep 2020 17:22:39 -0400 Subject: [PATCH] Handle non-connected monitor in processCmd. Quit when zm_terminate in checkInitiialized loop --- src/zm_monitorstream.cpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/zm_monitorstream.cpp b/src/zm_monitorstream.cpp index be2fe99c9..71a7a66d2 100644 --- a/src/zm_monitorstream.cpp +++ b/src/zm_monitorstream.cpp @@ -251,20 +251,29 @@ void MonitorStream::processCommand(const CmdMsg *msg) { } status_data; status_data.id = monitor->Id(); - status_data.fps = monitor->GetFPS(); - status_data.state = monitor->shared_data->state; - if ( playback_buffer > 0 ) - status_data.buffer_level = (MOD_ADD( (temp_write_index-temp_read_index), 0, temp_image_buffer_count )*100)/temp_image_buffer_count; - else + if ( ! monitor->ShmValid() ) { + status_data.fps = 0.0; + status_data.state = Monitor::UNKNOWN; + //status_data.enabled = monitor->shared_data->active; + status_data.enabled = false; + status_data.forced = false; status_data.buffer_level = 0; + } else { + status_data.fps = monitor->GetFPS(); + status_data.state = monitor->shared_data->state; + //status_data.enabled = monitor->shared_data->active; + status_data.enabled = monitor->trigger_data->trigger_state!=Monitor::TRIGGER_OFF; + status_data.forced = monitor->trigger_data->trigger_state==Monitor::TRIGGER_ON; + if ( playback_buffer > 0 ) + status_data.buffer_level = (MOD_ADD( (temp_write_index-temp_read_index), 0, temp_image_buffer_count )*100)/temp_image_buffer_count; + else + status_data.buffer_level = 0; + } status_data.delayed = delayed; status_data.paused = paused; status_data.rate = replay_rate; - status_data.delay = TV_2_FLOAT( now ) - TV_2_FLOAT( last_frame_timestamp ); + status_data.delay = TV_2_FLOAT(now) - TV_2_FLOAT(last_frame_timestamp); status_data.zoom = zoom; - //status_data.enabled = monitor->shared_data->active; - status_data.enabled = monitor->trigger_data->trigger_state!=Monitor::TRIGGER_OFF; - status_data.forced = monitor->trigger_data->trigger_state==Monitor::TRIGGER_ON; Debug(2, "Buffer Level:%d, Delayed:%d, Paused:%d, Rate:%d, delay:%.3f, Zoom:%d, Enabled:%d Forced:%d", status_data.buffer_level, status_data.delayed, @@ -291,12 +300,13 @@ void MonitorStream::processCommand(const CmdMsg *msg) { // quit after sending a status, if this was a quit request if ( (MsgCommand)msg->msg_data[0]==CMD_QUIT ) { - Debug(2,"Quitting"); - exit(0); + zm_terminate = true; + Debug(2, "Quitting"); + return; } - Debug(2,"Updating framerate"); - updateFrameRate(monitor->GetFPS()); + //Debug(2,"Updating framerate"); + //updateFrameRate(monitor->GetFPS()); } // end void MonitorStream::processCommand(const CmdMsg *msg) bool MonitorStream::sendFrame(const char *filepath, struct timeval *timestamp) { @@ -462,6 +472,8 @@ void MonitorStream::runStream() { checkCommandQueue(); sleep(1); } + if ( zm_terminate ) + return; } updateFrameRate(monitor->GetFPS());