diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-19 18:19:02 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-19 18:19:02 +0000 |
commit | 58818426d60d583c4becc6a99b398cbac1b7b12f (patch) | |
tree | 5fee3540f8d72d45cd1b2e5bf15e5860581dd4f8 /apps/app_sms.c | |
parent | a4d6ea67a7536e2cb2337527357ce6d3db8639f3 (diff) |
Massive cleanups to applications for LOCAL_USER handling and some other things.
In general, LOCAL_USER_ADD/REMOVE should be the first/last thing called in an
application. An exception is if there is some *fast* setup code that might
halt the execution of the application, such as checking to see if an argument
exists.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6832 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_sms.c')
-rwxr-xr-x | apps/app_sms.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/apps/app_sms.c b/apps/app_sms.c index 80ad3ddb0..77774f20b 100755 --- a/apps/app_sms.c +++ b/apps/app_sms.c @@ -1363,10 +1363,14 @@ static int sms_exec (struct ast_channel *chan, void *data) struct localuser *u; struct ast_frame *f; sms_t h = { 0 }; + + LOCAL_USER_ADD(u); + h.ipc0 = h.ipc1 = 20; /* phase for cosine */ h.dcs = 0xF1; /* default */ if (!data) { ast_log (LOG_ERROR, "Requires queue name at least\n"); + LOCAL_USER_REMOVE(u); return -1; } @@ -1379,11 +1383,13 @@ static int sms_exec (struct ast_channel *chan, void *data) answer = 0; if (!*d || *d == '|') { ast_log (LOG_ERROR, "Requires queue name\n"); + LOCAL_USER_REMOVE(u); return -1; } for (p = d; *p && *p != '|'; p++); if (p - d >= sizeof (h.queue)) { ast_log (LOG_ERROR, "Queue name too long\n"); + LOCAL_USER_REMOVE(u); return -1; } strncpy (h.queue, d, p - d); @@ -1452,6 +1458,7 @@ static int sms_exec (struct ast_channel *chan, void *data) h.rx = 0; /* sent message */ h.mr = -1; sms_writefile (&h); + LOCAL_USER_REMOVE(u); return 0; } @@ -1463,7 +1470,6 @@ static int sms_exec (struct ast_channel *chan, void *data) } } - LOCAL_USER_ADD (u); if (chan->_state != AST_STATE_UP) ast_answer (chan); @@ -1475,14 +1481,14 @@ static int sms_exec (struct ast_channel *chan, void *data) if (res >= 0) res = ast_set_read_format (chan, AST_FORMAT_SLINEAR); if (res < 0) { - LOCAL_USER_REMOVE (u); ast_log (LOG_ERROR, "Unable to set to linear mode, giving up\n"); + LOCAL_USER_REMOVE (u); return -1; } if (ast_activate_generator (chan, &smsgen, &h) < 0) { - LOCAL_USER_REMOVE (u); ast_log (LOG_ERROR, "Failed to activate generator on '%s'\n", chan->name); + LOCAL_USER_REMOVE (u); return -1; } |