From: Scott Griepentrog Date: Wed, 1 Jul 2015 18:34:46 +0000 (-0500) Subject: Channel alert pipe: improve diagnostic error return X-Git-Tag: 11.19.0-rc1~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8874d5fc94d6dcfdaea6e697d31d3f5dcf6330f6;p=thirdparty%2Fasterisk.git Channel alert pipe: improve diagnostic error return 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 --- diff --git a/main/channel_internal_api.c b/main/channel_internal_api.c index 3cfa6817be..30790d09f2 100644 --- a/main/channel_internal_api.c +++ b/main/channel_internal_api.c @@ -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; } }