]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Channel alert pipe: improve diagnostic error return 55/755/1
authorScott Griepentrog <scott@griepentrog.com>
Wed, 1 Jul 2015 18:34:46 +0000 (13:34 -0500)
committerScott Griepentrog <sgriepentrog@digium.com>
Wed, 1 Jul 2015 22:05:49 +0000 (17:05 -0500)
When a frame is queued on a channel, any failure in
ast_channel_alert_write is logged along with errno.

This change improves the diagnostic message through
aligning the errno value with actual failure cases.

ASTERISK-25224
Reported by: Andrey Biglari

Change-Id: I1bf7b3337ad392789a9f02c650589cd065d20b5b

main/channel_internal_api.c

index 3cfa6817be2d77e58f7235d22b755126e3f7d143..30790d09f28ba3ad49a8781855252770856eb0ad 100644 (file)
@@ -1098,7 +1098,14 @@ void ast_channel_named_pickupgroups_set(struct ast_channel *chan, struct ast_nam
 int ast_channel_alert_write(struct ast_channel *chan)
 {
        char blah = 0x7F;
-       return ast_channel_alert_writable(chan) && write(chan->alertpipe[1], &blah, sizeof(blah)) != sizeof(blah);
+
+       if (!ast_channel_alert_writable(chan)) {
+               errno = EBADF;
+               return 0;
+       }
+       /* preset errno in case returned size does not match */
+       errno = EPIPE;
+       return write(chan->alertpipe[1], &blah, sizeof(blah)) != sizeof(blah);
 }
 
 ast_alert_status_t ast_channel_internal_alert_read(struct ast_channel *chan)
@@ -1149,9 +1156,11 @@ void ast_channel_internal_alertpipe_close(struct ast_channel *chan)
 {
        if (ast_channel_internal_alert_readable(chan)) {
                close(chan->alertpipe[0]);
+               chan->alertpipe[0] = -1;
        }
        if (ast_channel_alert_writable(chan)) {
                close(chan->alertpipe[1]);
+               chan->alertpipe[1] = -1;
        }
 }