mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 12:20:41 +00:00
remove assert in global mq
This commit is contained in:
@@ -37,14 +37,13 @@ static struct global_queue *Q = NULL;
|
|||||||
#define LOCK(q) while (__sync_lock_test_and_set(&(q)->lock,1)) {}
|
#define LOCK(q) while (__sync_lock_test_and_set(&(q)->lock,1)) {}
|
||||||
#define UNLOCK(q) __sync_lock_release(&(q)->lock);
|
#define UNLOCK(q) __sync_lock_release(&(q)->lock);
|
||||||
|
|
||||||
#define GP(p) ((p) % (MAX_GLOBAL_MQ-1))
|
#define GP(p) ((p) % MAX_GLOBAL_MQ)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
skynet_globalmq_push(struct message_queue * queue) {
|
skynet_globalmq_push(struct message_queue * queue) {
|
||||||
struct global_queue *q= Q;
|
struct global_queue *q= Q;
|
||||||
|
|
||||||
uint32_t tail = GP(__sync_fetch_and_add(&q->tail,1));
|
uint32_t tail = GP(__sync_fetch_and_add(&q->tail,1));
|
||||||
assert(!q->flag[tail]);
|
|
||||||
q->queue[tail] = queue;
|
q->queue[tail] = queue;
|
||||||
__sync_synchronize();
|
__sync_synchronize();
|
||||||
q->flag[tail] = true;
|
q->flag[tail] = true;
|
||||||
@@ -69,6 +68,7 @@ skynet_globalmq_pop() {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
q->flag[head_ptr] = false;
|
q->flag[head_ptr] = false;
|
||||||
|
__sync_synchronize();
|
||||||
|
|
||||||
return mq;
|
return mq;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user