• Home
  • Raw
  • Download

Lines Matching full:pool

15 #include <openssl/pool.h>
43 CRYPTO_BUFFER_POOL *pool = OPENSSL_malloc(sizeof(CRYPTO_BUFFER_POOL)); in CRYPTO_BUFFER_POOL_new() local
44 if (pool == NULL) { in CRYPTO_BUFFER_POOL_new()
48 OPENSSL_memset(pool, 0, sizeof(CRYPTO_BUFFER_POOL)); in CRYPTO_BUFFER_POOL_new()
49 pool->bufs = lh_CRYPTO_BUFFER_new(CRYPTO_BUFFER_hash, CRYPTO_BUFFER_cmp); in CRYPTO_BUFFER_POOL_new()
50 if (pool->bufs == NULL) { in CRYPTO_BUFFER_POOL_new()
51 OPENSSL_free(pool); in CRYPTO_BUFFER_POOL_new()
55 CRYPTO_MUTEX_init(&pool->lock); in CRYPTO_BUFFER_POOL_new()
57 return pool; in CRYPTO_BUFFER_POOL_new()
60 void CRYPTO_BUFFER_POOL_free(CRYPTO_BUFFER_POOL *pool) { in CRYPTO_BUFFER_POOL_free() argument
61 if (pool == NULL) { in CRYPTO_BUFFER_POOL_free()
66 CRYPTO_MUTEX_lock_write(&pool->lock); in CRYPTO_BUFFER_POOL_free()
67 assert(lh_CRYPTO_BUFFER_num_items(pool->bufs) == 0); in CRYPTO_BUFFER_POOL_free()
68 CRYPTO_MUTEX_unlock_write(&pool->lock); in CRYPTO_BUFFER_POOL_free()
71 lh_CRYPTO_BUFFER_free(pool->bufs); in CRYPTO_BUFFER_POOL_free()
72 CRYPTO_MUTEX_cleanup(&pool->lock); in CRYPTO_BUFFER_POOL_free()
73 OPENSSL_free(pool); in CRYPTO_BUFFER_POOL_free()
77 CRYPTO_BUFFER_POOL *pool) { in CRYPTO_BUFFER_new() argument
78 if (pool != NULL) { in CRYPTO_BUFFER_new()
83 CRYPTO_MUTEX_lock_read(&pool->lock); in CRYPTO_BUFFER_new()
85 lh_CRYPTO_BUFFER_retrieve(pool->bufs, &tmp); in CRYPTO_BUFFER_new()
89 CRYPTO_MUTEX_unlock_read(&pool->lock); in CRYPTO_BUFFER_new()
111 if (pool == NULL) { in CRYPTO_BUFFER_new()
115 buf->pool = pool; in CRYPTO_BUFFER_new()
117 CRYPTO_MUTEX_lock_write(&pool->lock); in CRYPTO_BUFFER_new()
118 CRYPTO_BUFFER *duplicate = lh_CRYPTO_BUFFER_retrieve(pool->bufs, buf); in CRYPTO_BUFFER_new()
122 inserted = lh_CRYPTO_BUFFER_insert(pool->bufs, &old, buf); in CRYPTO_BUFFER_new()
127 CRYPTO_MUTEX_unlock_write(&pool->lock); in CRYPTO_BUFFER_new()
130 // We raced to insert |buf| into the pool and lost, or else there was an in CRYPTO_BUFFER_new()
159 CRYPTO_BUFFER* CRYPTO_BUFFER_new_from_CBS(CBS *cbs, CRYPTO_BUFFER_POOL *pool) { in CRYPTO_BUFFER_new_from_CBS() argument
160 return CRYPTO_BUFFER_new(CBS_data(cbs), CBS_len(cbs), pool); in CRYPTO_BUFFER_new_from_CBS()
168 CRYPTO_BUFFER_POOL *const pool = buf->pool; in CRYPTO_BUFFER_free() local
169 if (pool == NULL) { in CRYPTO_BUFFER_free()
172 // from any pool to this buffer and thus we are able to free this in CRYPTO_BUFFER_free()
181 CRYPTO_MUTEX_lock_write(&pool->lock); in CRYPTO_BUFFER_free()
183 CRYPTO_MUTEX_unlock_write(&buf->pool->lock); in CRYPTO_BUFFER_free()
187 // We have an exclusive lock on the pool, therefore no concurrent lookups can in CRYPTO_BUFFER_free()
191 void *found = lh_CRYPTO_BUFFER_delete(pool->bufs, buf); in CRYPTO_BUFFER_free()
195 CRYPTO_MUTEX_unlock_write(&buf->pool->lock); in CRYPTO_BUFFER_free()
201 // This is safe in the case that |buf->pool| is NULL because it's just in CRYPTO_BUFFER_up_ref()
204 // This is also safe if |buf->pool| is non-NULL because, if it were racing in CRYPTO_BUFFER_up_ref()