From 2f1e57f3f450d0b89f80a481169801ee0d8a02e6 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Mon, 14 Nov 2022 17:19:23 -0500 Subject: [PATCH] 2022-11-14 Fred Gleason * Fixed a regression in rdcatchd(8) that caused conflicting play-out events to deadlock. Signed-off-by: Fred Gleason --- ChangeLog | 3 +++ rdcatchd/rdcatchd.cpp | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index b9957db9..f558a51e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23669,3 +23669,6 @@ 2022-11-14 Fred Gleason * Fixed a race condition with calculating the effect start time of events in rdcatchd(8). +2022-11-14 Fred Gleason + * Fixed a regression in rdcatchd(8) that caused conflicting play-out + events to deadlock. diff --git a/rdcatchd/rdcatchd.cpp b/rdcatchd/rdcatchd.cpp index 71898e48..450bd110 100644 --- a/rdcatchd/rdcatchd.cpp +++ b/rdcatchd/rdcatchd.cpp @@ -577,14 +577,14 @@ void MainObject::engineData(int id) // Check for Playout Deck Availability // if(catch_events[event].type()==RDRecording::Playout) { + rda->syslog(LOG_NOTICE,"checking channel: %d: %d",catch_events[event].channel(),catch_playout_deck_status[catch_events[event].channel()-129]); if(catch_playout_deck_status[catch_events[event].channel()-129]!= RDDeck::Idle) { rda->syslog(LOG_WARNING,"playout deck P%d is busy for event %d, skipping", catch_events[event].channel()-128, catch_events[event].id()); WriteExitCode(event,RDRecording::DeviceBusy); - SendEventResponse(0,RDDeck::Recording,catch_events[event].id(), - catch_events[event].cutName()); + return; } } @@ -2038,9 +2038,13 @@ void MainObject::WriteExitCode(int event,RDRecording::ExitCode code, const QString &err_text) { RDDeck::Status status=RDDeck::Offline; + QString err_txt=err_text; + if(err_text.isEmpty()) { + err_txt=RDRecording::exitString(code); + } QString sql=QString("update `RECORDINGS` set ")+ QString::asprintf("`EXIT_CODE`=%d,",code)+ - "`EXIT_TEXT`='"+RDEscapeString(err_text)+"' where "+ + "`EXIT_TEXT`='"+RDEscapeString(err_txt)+"' where "+ QString::asprintf("`ID`=%d",catch_events[event].id()); RDSqlQuery::apply(sql); switch(code) { @@ -2081,9 +2085,13 @@ void MainObject::WriteExitCode(CatchEvent *ce,RDRecording::ExitCode code, const QString &err_text) { RDDeck::Status status=RDDeck::Offline; + QString err_txt=err_text; + if(err_text.isEmpty()) { + err_txt=RDRecording::exitString(code); + } QString sql=QString("update `RECORDINGS` set ")+ QString::asprintf("`EXIT_CODE`=%d,",code)+ - "`EXIT_TEXT`='"+RDEscapeString(err_text)+"' where "+ + "`EXIT_TEXT`='"+RDEscapeString(err_txt)+"' where "+ QString::asprintf("`ID`=%d",ce->id()); RDSqlQuery::apply(sql); switch(code) {