diff options
Diffstat (limited to 'pjlib/src')
-rw-r--r-- | pjlib/src/pj/ioqueue_common_abs.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/pjlib/src/pj/ioqueue_common_abs.c b/pjlib/src/pj/ioqueue_common_abs.c index 0af9cba5..6e2f34ca 100644 --- a/pjlib/src/pj/ioqueue_common_abs.c +++ b/pjlib/src/pj/ioqueue_common_abs.c @@ -641,13 +641,16 @@ PJ_DEF(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key, PJ_ASSERT_RETURN(key && op_key && buffer && length, PJ_EINVAL); PJ_CHECK_STACK(); - read_op = (struct read_operation*)op_key; - read_op->op = PJ_IOQUEUE_OP_NONE; - - /* Check if key is closing. */ + /* Check if key is closing (need to do this first before accessing + * other variables, since they might have been destroyed. See ticket + * #469). + */ if (IS_CLOSING(key)) return PJ_ECANCELLED; + read_op = (struct read_operation*)op_key; + read_op->op = PJ_IOQUEUE_OP_NONE; + /* Try to see if there's data immediately available. */ if ((flags & PJ_IOQUEUE_ALWAYS_ASYNC) == 0) { |