Close events in a background thread. Add a ton more debugging

This commit is contained in:
Isaac Connor 2021-04-05 12:55:47 -04:00
parent a5f0945306
commit 4c988860d5
2 changed files with 18 additions and 8 deletions

View File

@ -1832,6 +1832,7 @@ bool Monitor::Analyse() {
// Need to guard around event creation/deletion from Reload()
std::lock_guard<std::mutex> lck(event_mutex);
Debug(3, "Have event lock");
// if we have been told to be OFF, then we are off and don't do any processing.
if (trigger_data->trigger_state != TriggerState::TRIGGER_OFF) {
@ -1978,6 +1979,8 @@ bool Monitor::Analyse() {
cause += MOTION_CAUSE;
noteSetMap[MOTION_CAUSE] = zoneSet;
} // end if motion_score
} else {
Debug(1, "Not Active(%d) enabled %d active %d", Active(), enabled, shared_data->active);
} // end if active and doing motion detection
if (function == RECORD or function == MOCORD) {
@ -2211,6 +2214,7 @@ bool Monitor::Analyse() {
State_Strings[state].c_str(), analysis_image_count, last_alarm_count, post_event_count,
timestamp->tv_sec, video_store_data->recording.tv_sec, min_section_length);
}
Debug(1, "PreAlarmCount");
if (Event::PreAlarmCount())
Event::EmptyPreAlarmFrames();
} // end if score or not
@ -2918,15 +2922,20 @@ void Monitor::TimestampImage(Image *ts_image, const struct timeval *ts_time) con
Debug(2, "done annotating %s", label_text);
} // end void Monitor::TimestampImage
bool Monitor::closeEvent() {
if ( !event )
return false;
void Monitor::closeEvent() {
if (!event) return;
delete event;
if ( close_event_thread.joinable() ) {
Debug(1, "close event thread is joinable");
close_event_thread.join();
} else {
Debug(1, "close event thread is not joinable");
}
Debug(1, "Starting thread to close event");
close_event_thread = std::thread([](Event *e){ delete e; }, event);
Debug(1, "Nulling event");
event = nullptr;
if ( shared_data )
video_store_data->recording = {};
return true;
if (shared_data) video_store_data->recording = {};
} // end bool Monitor::closeEvent()
unsigned int Monitor::DetectMotion(const Image &comp_image, Event::StringSet &zoneSet) {

View File

@ -381,6 +381,7 @@ protected:
DecoderThread *decoder;
AVFrame *dest_frame; // Used by decoding thread doing colorspace conversions
SwsContext *convert_context;
std::thread close_event_thread;
int n_zones;
Zone **zones;
@ -556,7 +557,7 @@ public:
bool Decode();
void DumpImage( Image *dump_image ) const;
void TimestampImage( Image *ts_image, const struct timeval *ts_time ) const;
bool closeEvent();
void closeEvent();
void Reload();
void ReloadZones();