[Jack-Devel] jack2: question about possible race condition
by Miartus, Adam (Arion Recruitment; ADITG/ESM)
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