]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_console: don't read and write at the same time
authorOron Peled <oron.peled@xorcom.com>
Tue, 19 Dec 2017 08:52:54 +0000 (10:52 +0200)
committerJoshua Colp <jcolp@digium.com>
Thu, 8 Feb 2018 12:55:30 +0000 (06:55 -0600)
It seems that the ALSA backend of PortAudio doesn't know how to both
read and write at the same time by adding a per-device mutex.

FIXME: currently only a draft version. Need to either auto-detect
we work with the ALSA backend or add an extra configuration option
to use this mutex.

ASTERISK-27426 #close

Change-Id: I635eacee45f5413faa18f5a3b606af03b926dacb

channels/chan_console.c

index bc5f7f2fede1308e3ba015026ed87678221ffa84..f09694bcf48c5fef6991194574d91f7a306589bb 100644 (file)
@@ -280,7 +280,9 @@ static void *stream_monitor(void *data)
 
        for (;;) {
                pthread_testcancel();
+               console_pvt_lock(pvt);
                res = Pa_ReadStream(pvt->stream, buf, sizeof(buf) / sizeof(int16_t));
+               console_pvt_unlock(pvt);
                pthread_testcancel();
 
                if (!pvt->owner) {
@@ -613,7 +615,9 @@ static int console_write(struct ast_channel *chan, struct ast_frame *f)
 {
        struct console_pvt *pvt = ast_channel_tech_pvt(chan);
 
+       console_pvt_lock(pvt);
        Pa_WriteStream(pvt->stream, f->data.ptr, f->samples);
+       console_pvt_unlock(pvt);
 
        return 0;
 }