summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/dfcdrom/cdr-linux.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/plugins/dfcdrom/cdr-linux.c b/plugins/dfcdrom/cdr-linux.c
index ddf81767..68443ee9 100644
--- a/plugins/dfcdrom/cdr-linux.c
+++ b/plugins/dfcdrom/cdr-linux.c
@@ -522,19 +522,27 @@ unsigned char *CDRgetBufferSub(void) {
int ret;
if (!UseSubQ) return NULL;
-
if (subqread) return (unsigned char *)&subq;
cr.msf.cdmsf_min0 = btoi(lastTime[0]);
cr.msf.cdmsf_sec0 = btoi(lastTime[1]);
cr.msf.cdmsf_frame0 = btoi(lastTime[2]);
+
+ if (ReadMode == THREADED) pthread_mutex_lock(&mut);
+
if (ioctl(cdHandle, CDROMSEEK, &cr.msf) == -1) {
// will be slower, but there's no other way to make it accurate
- if (ioctl(cdHandle, CDROMREADRAW, &cr) == -1) return NULL;
+ if (ioctl(cdHandle, CDROMREADRAW, &cr) == -1) {
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+ return NULL;
+ }
}
subchnl.cdsc_format = CDROM_MSF;
ret = ioctl(cdHandle, CDROMSUBCHNL, &subchnl);
+
+ if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
+
if (ret == -1) return NULL;
subqread = 1;