[Asterisk-Users] Re: System call succeed, asterisk sees failure
Bill Michaelson
bill at cosi.com
Fri Feb 20 13:50:49 MST 2004
Then I infer that the asterisk process is improperly retrieving or interpreting the System process completion code. That would be a serious bug that could break a lot of applications. I wonder if it is specific to some installations or more widespread.
The validity of the code in app_system.c is unclear to me at first glance...
res = system((char *)data);
if (res < 0) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
res = -1;
} else if (res == 127) {
ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data);
res = -1;
} else {
if (res && ast_exists_extension(chan, chan->context, chan->exte\
n, chan->priority + 101, chan->callerid))
chan->priority+=100;
res = 0;
}
My reading of man pages indicates that the status return by system(2) (refer to wait()) is more than just the value set by an exit() call or returned by a main() function, which seems to be restricted to the low-order byte. I haven't studied it through, but I'm wondering if the hi-order bit can be set, thus causing (res < 0) in spite of successful process completion (returning 0).
Could this be the problem?
From: Eric Stanley <barnabas at knicknack.net>
To: asterisk-users at lists.digium.com
Subject: Re: [Asterisk-Users] System cmd usage
Date: Fri, 20 Feb 2004 12:22:12 -0600
Reply-To: asterisk-users at lists.digium.com
I saw the same thing. I think I determined that it always failed at the same
point in the macro, no matter what command was being executed. I just put
the whole cleanup process in a shell script and I execute the shell script
from the macro.
Eric
>Message: 2
>Date: Fri, 20 Feb 2004 12:48:36 -0500
>From: Bill Michaelson <bill at cosi.com>
>To: asterisk-users at lists.digium.com
>Subject: [Asterisk-Users] System cmd usage
>Reply-To: asterisk-users at lists.digium.com
>
>
>--------------030605000007040102040002
>Content-Type: text/plain; charset=us-ascii; format=flowed
>Content-Transfer-Encoding: 7bit
>
>Using John Todd's example for recording, from his cleanup/conversion
>macro...
>
>; Turn the two in/out .wav files into a single .wav file with both channels
>exten => s,3,System(/usr/local/bin/wmix
>${MONITORDIR}/${CALLFILENAME}-in.wav ${\
>MONITORDIR}/${CALLFILENAME}-out.wav > ${MONITORDIR}/${CALLFILENAME})
>;
>; Remove the old .wav files - we don't need them anymore.
>exten => s,4,System(/bin/rm ${MONITORDIR}/${CALLFILENAME}-in.wav
>${MONITORDIR}/\
>${CALLFILENAME}-out.wav)
>;
>; This part of the routine compresses the .wav files into a .gsm file for
>; better storage (about 1/5 the size of a .wav file). Use "untoast" to
>restor\
>e
>; to normal wav file format. (toast and untoast are fairly standard on
>Linux s\
>ystems)
>;
>exten => s,5,System(/usr/bin/toast -F ${MONITORDIR}/${CALLFILENAME})
>
>The wmix runs successfully (it produces the mixed file), and running "by
>hand" from the shell indicates that it returns 0 to the shell. But the
>* console log seems to think it failed...
>
> -- Executing System("SIP/248379-fe6e", "/usr/local/bin/wmix
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873-in.wav
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873-out.wav >
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873") in new stack
>Feb 20 12:12:56 WARNING[1209214528]: app_system.c:57 system_exec: Unable
>to execute '/usr/local/bin/wmix
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873-in.wav
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873-out.wav >
>/var/spool/asterisk/monitor/20040220-121235-111-916095326873'
> == Spawn extension (macro-record-cleanup, s, 3) exited non-zero on
>'SIP/248379-fe6e' in macro 'record-cleanup'
> == Spawn extension (intern-post, s, 1) exited non-zero on
>'SIP/248379-fe6e'
>
>Any ideas why?
>
>
>
More information about the asterisk-users
mailing list