[Jack-Devel] jack2: question about possible race condition

Miartus, Adam (Arion Recruitment; ADITG/ESM) amiartus at de.adit-jv.com
Mon Aug 26 17:15:36 CEST 2019


Dear Jack2 Maintainers,

I have a question about JackAudioDriver.cpp. It seems to me like there could be a possible race condition in JackAudioDriver::ProcessGraphSyncMaster(), where the driver would do read and write on a slave device without waiting for graph execution end.

Below is the proposed "fix", or what I would expect is correct, am I reading something wrong in the code? What do you guys think?

diff --git a/common/JackAudioDriver.cpp b/common/JackAudioDriver.cpp
index ef7c683..9172fe8 100644
--- a/common/JackAudioDriver.cpp
+++ b/common/JackAudioDriver.cpp
@@ -327,16 +327,12 @@ void JackAudioDriver::ProcessGraphSyncMaster()
     // fBeginDateUst is set in the "low level" layer, fEndDateUst is from previous cycle
     if (fEngine->Process(fBeginDateUst, fEndDateUst)) {
-        if (ResumeRefNum() < 0) {
-            jack_error("JackAudioDriver::ProcessGraphSyncMaster: ResumeRefNum error");
-        }
-
         if (ProcessReadSlaves() < 0) {
             jack_error("JackAudioDriver::ProcessGraphSync: ProcessReadSlaves error, engine may now behave abnormally!!");
         }
-        if (ProcessWriteSlaves() < 0) {
-            jack_error("JackAudioDriver::ProcessGraphSync: ProcessWriteSlaves error, engine may now behave abnormally!!");
+        if (ResumeRefNum() < 0) {
+            jack_error("JackAudioDriver::ProcessGraphSyncMaster: ResumeRefNum error");
         }
         // Waits for graph execution end
@@ -344,6 +340,10 @@ void JackAudioDriver::ProcessGraphSyncMaster()
             jack_error("JackAudioDriver::ProcessGraphSync: SuspendRefNum error, engine may now behave abnormally!!");
         }
+        if (ProcessWriteSlaves() < 0) {
+            jack_error("JackAudioDriver::ProcessGraphSync: ProcessWriteSlaves error, engine may now behave abnormally!!");
+        }
+
     } else { // Graph not finished: do not activate it
         jack_error("JackAudioDriver::ProcessGraphSync: Process error");
     }
--
2.7.4

Best regards

Adam Miartus
Engineering Software Multimedia (ADITG/ESM)

Tel. +49 5121 49 6973

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.linuxaudio.org/archives/jackaudio/attachments/20190826/707ef23e/attachment.html>


More information about the Jackaudio mailing list