rendered paste bodyJSBool chan_await(JSContext * cx, JSObject * obj, uintN argc, jsval * argv,
jsval * rval)
{
struct jchan *jc = JS_GetPrivate(cx, obj);
*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
int rc;
int wait = 0;
if ( jc->chanevents ) {
//pthread_mutex_lock(&jc->chanevents->mutex);
if ( argc > 0 ) {
if ( (JS_ValueToInt32(cx, argv[0], &wait) ) && wait && wait > 0) {
struct timespec abstime = { 0, 0 };
struct timeval curtime;
gettimeofday(&curtime, NULL);
abstime.tv_sec = curtime.tv_sec + wait;
rc = ast_cond_timedwait(&jc->chanevents->cond, &jc->chanevents->mutex, &abstime);
if ( rc == 0 )
*rval = BOOLEAN_TO_JSVAL(JS_TRUE);
} else {
rc = ast_cond_wait(&jc->chanevents->cond, &jc->chanevents->mutex);
if (rc == 0) {
*rval = BOOLEAN_TO_JSVAL(JS_TRUE);
} else {
ast_verbose("ast_cond_wait return %d\n", rc);
return JS_FALSE;
}
}
}
}
return JS_TRUE;
}
void *pbx_aexec_helper(void *arg)
{
struct fast_aexec *exec_data = arg;
// struct ast_channel *chan = NULL;
// pthread_mutex_lock(&exec_data->chanevents->mutex);
pbx_exec(exec_data->chan, exec_data->appS, exec_data->data, 1);
if (ast_cond_broadcast(&exec_data->chanevents->cond) != 0) {
ast_verbose("Main failed to broadcast the condition\n");
}
ast_mutex_destroy(&exec_data->chanevents->mutex);
ast_cond_destroy(&exec_data->chanevents->cond);
if ( ast_check_hangup(exec_data->chan) == TRUE )
ast_softhangup(exec_data->chan, AST_SOFTHANGUP_EXPLICIT);
// ast_softhangup(exec_data->chan, AST_SOFTHANGUP_EXPLICIT);
// ast_hangup(exec_data->chan);
return NULL;
}