diff options
Diffstat (limited to 'pjlib/src/pj')
-rw-r--r-- | pjlib/src/pj/pool.c | 4 | ||||
-rw-r--r-- | pjlib/src/pj/pool_buf.c | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/pjlib/src/pj/pool.c b/pjlib/src/pj/pool.c index dccb9c1b..16081aa1 100644 --- a/pjlib/src/pj/pool.c +++ b/pjlib/src/pj/pool.c @@ -174,6 +174,10 @@ PJ_DEF(pj_pool_t*) pj_pool_create_int( pj_pool_factory *f, const char *name, PJ_CHECK_STACK(); + /* Size must be at least sizeof(pj_pool)+sizeof(pj_pool_block) */ + PJ_ASSERT_RETURN(initial_size >= sizeof(pj_pool_t)+sizeof(pj_pool_block), + NULL); + /* If callback is NULL, set calback from the policy */ if (callback == NULL) callback = f->policy.callback; diff --git a/pjlib/src/pj/pool_buf.c b/pjlib/src/pj/pool_buf.c index c373fa75..ce787ce0 100644 --- a/pjlib/src/pj/pool_buf.c +++ b/pjlib/src/pj/pool_buf.c @@ -53,17 +53,26 @@ static pj_status_t pool_buf_initialize() static void* stack_alloc(pj_pool_factory *factory, pj_size_t size) { struct creation_param *param; + void *buf; PJ_UNUSED_ARG(factory); param = pj_thread_local_get(tls); - PJ_ASSERT_RETURN(param != NULL, NULL); + if (param == NULL) { + /* Don't assert(), this is normal no-memory situation */ + return NULL; + } pj_thread_local_set(tls, NULL); PJ_ASSERT_RETURN(size <= param->size, NULL); - return param->stack_buf; + buf = param->stack_buf; + + /* Prevent the buffer from being reused */ + param->stack_buf = NULL; + + return buf; } |