Properly handle exceptions in zt_read
authorMark Spencer <markster@digium.com>
Thu, 11 Dec 2003 16:36:33 +0000 (16:36 +0000)
committerMark Spencer <markster@digium.com>
Thu, 11 Dec 2003 16:36:33 +0000 (16:36 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1853 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_zap.c

index ffeedc1..eb8e9cb 100755 (executable)
@@ -3180,7 +3180,9 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast)
        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;
        int res;
@@ -3286,6 +3288,16 @@ struct ast_frame *zt_exception(struct ast_channel *ast)
        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 zt_pvt *p = ast->pvt->pvt;
@@ -3401,7 +3413,7 @@ struct ast_frame  *zt_read(struct ast_channel *ast)
                                ast_mutex_unlock(&p->lock);
                                return &p->subs[index].f;
                        } else if (errno == ELAST) {
-                               f = zt_handle_event(ast);
+                               f = __zt_exception(ast);
                        } else
                                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)) {
                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);
                return f;
        }