diff options
Diffstat (limited to 'accel-pppd/triton')
-rw-r--r-- | accel-pppd/triton/mempool.c | 11 | ||||
-rw-r--r-- | accel-pppd/triton/triton.c | 16 |
2 files changed, 14 insertions, 13 deletions
diff --git a/accel-pppd/triton/mempool.c b/accel-pppd/triton/mempool.c index 5323771..1ee00f3 100644 --- a/accel-pppd/triton/mempool.c +++ b/accel-pppd/triton/mempool.c @@ -29,9 +29,9 @@ struct _mempool_t struct list_head items; #ifdef MEMDEBUG struct list_head ditems; + uint64_t magic; #endif spinlock_t lock; - uint64_t magic; int mmap:1; int objects; }; @@ -46,9 +46,9 @@ struct _item_t #ifdef MEMDEBUG const char *fname; int line; -#endif uint64_t magic2; uint64_t magic1; +#endif char ptr[0]; }; @@ -69,10 +69,10 @@ mempool_t __export *mempool_create(int size) INIT_LIST_HEAD(&p->items); #ifdef MEMDEBUG INIT_LIST_HEAD(&p->ditems); + p->magic = (uint64_t)random() * (uint64_t)random(); #endif spinlock_init(&p->lock); p->size = size; - p->magic = (uint64_t)random() * (uint64_t)random(); spin_lock(&pools_lock); list_add_tail(&p->entry, &pools); @@ -106,8 +106,6 @@ void __export *mempool_alloc(mempool_t *pool) --p->objects; __sync_sub_and_fetch(&triton_stat.mempool_available, size); - it->magic1 = MAGIC1; - return it->ptr; #ifdef VALGRIND } @@ -135,9 +133,6 @@ void __export *mempool_alloc(mempool_t *pool) return NULL; } it->owner = p; - it->magic2 = p->magic; - it->magic1 = MAGIC1; - *(uint64_t*)(it->ptr + p->size) = it->magic2; return it->ptr; } diff --git a/accel-pppd/triton/triton.c b/accel-pppd/triton/triton.c index 267cc2b..d4c21e2 100644 --- a/accel-pppd/triton/triton.c +++ b/accel-pppd/triton/triton.c @@ -185,11 +185,6 @@ static void ctx_thread(struct _triton_context_t *ctx) uint64_t tt; log_debug2("ctx %p %p: enter\n", ctx, ctx->thread); - if (ctx->need_close) { - if (ctx->ud->close) - ctx->ud->close(ctx->ud); - ctx->need_close = 0; - } while (1) { spin_lock(&ctx->lock); @@ -234,6 +229,17 @@ static void ctx_thread(struct _triton_context_t *ctx) break; } + spin_lock(&ctx->lock); + if (ctx->need_close) { + spin_unlock(&ctx->lock); + if (ctx->ud->close) { + ctx->ud->close(ctx->ud); + } + spin_lock(&ctx->lock); + ctx->need_close = 0; + } + spin_unlock(&ctx->lock); + log_debug2("ctx %p %p: exit\n", ctx, ctx->thread); } |