Properly handle exceptions in zt_read

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1853 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.0
Mark Spencer 22 years ago
parent c3b80c117f
commit 1540cd05a9

@ -3180,7 +3180,9 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
return &p->subs[index].f; return &p->subs[index].f;
} }
struct ast_frame *zt_exception(struct ast_channel *ast)
static struct ast_frame *__zt_exception(struct ast_channel *ast)
{ {
struct zt_pvt *p = ast->pvt->pvt; struct zt_pvt *p = ast->pvt->pvt;
int res; int res;
@ -3286,6 +3288,16 @@ struct ast_frame *zt_exception(struct ast_channel *ast)
return f; return f;
} }
struct ast_frame *zt_exception(struct ast_channel *ast)
{
struct zt_pvt *p = ast->pvt->pvt;
struct ast_frame *f;
ast_mutex_lock(&p->lock);
f = __zt_exception(ast);
ast_mutex_unlock(&p->lock);
return f;
}
struct ast_frame *zt_read(struct ast_channel *ast) struct ast_frame *zt_read(struct ast_channel *ast)
{ {
struct zt_pvt *p = ast->pvt->pvt; struct zt_pvt *p = ast->pvt->pvt;
@ -3401,7 +3413,7 @@ struct ast_frame *zt_read(struct ast_channel *ast)
ast_mutex_unlock(&p->lock); ast_mutex_unlock(&p->lock);
return &p->subs[index].f; return &p->subs[index].f;
} else if (errno == ELAST) { } else if (errno == ELAST) {
f = zt_handle_event(ast); f = __zt_exception(ast);
} else } else
ast_log(LOG_WARNING, "zt_rec: %s\n", strerror(errno)); ast_log(LOG_WARNING, "zt_rec: %s\n", strerror(errno));
} }
@ -3410,7 +3422,7 @@ struct ast_frame *zt_read(struct ast_channel *ast)
} }
if (res != (p->subs[index].linear ? READ_SIZE * 2 : READ_SIZE)) { if (res != (p->subs[index].linear ? READ_SIZE * 2 : READ_SIZE)) {
ast_log(LOG_DEBUG, "Short read (%d/%d), must be an event...\n", res, p->subs[index].linear ? READ_SIZE * 2 : READ_SIZE); ast_log(LOG_DEBUG, "Short read (%d/%d), must be an event...\n", res, p->subs[index].linear ? READ_SIZE * 2 : READ_SIZE);
f = zt_handle_event(ast); f = __zt_exception(ast);
ast_mutex_unlock(&p->lock); ast_mutex_unlock(&p->lock);
return f; return f;
} }

Loading…
Cancel
Save