diff --git a/service/main.lua b/service/main.lua index b3367e90..ce1e4caa 100644 --- a/service/main.lua +++ b/service/main.lua @@ -2,7 +2,6 @@ local skynet = require "skynet" skynet.start(function() print("Server start") - local launcher = skynet.launch("snlua","launcher") local connection = skynet.launch("connection","256") local lualog = skynet.launch("snlua","lualog") local console = skynet.launch("snlua","console") @@ -12,7 +11,7 @@ skynet.start(function() local watchdog = skynet.launch("snlua","watchdog","8888 4 0") local db = skynet.launch("snlua","simpledb") local redis = skynet.launch("snlua","redis-mgr") --- skynet.launch("snlua","testgroup") + skynet.launch("snlua","testgroup") skynet.exit() end) diff --git a/skynet-src/skynet_handle.c b/skynet-src/skynet_handle.c index d1ecc125..fd6e4a5a 100644 --- a/skynet-src/skynet_handle.c +++ b/skynet-src/skynet_handle.c @@ -72,10 +72,10 @@ skynet_handle_retire(uint32_t handle) { uint32_t hash = handle & (s->slot_size-1); struct skynet_context * ctx = s->slot[hash]; + if (skynet_context_handle(ctx) == handle) { skynet_context_release(ctx); s->slot[hash] = NULL; - int i; int j=0, n=s->name_count; for (i=0; irelease) { + UNLOCK(q) ret = _drop_queue(q); } else { skynet_mq_force_push(q); + UNLOCK(q) } - UNLOCK(q) - return ret; } diff --git a/skynet-src/skynet_start.c b/skynet-src/skynet_start.c index a865355f..bad00b38 100644 --- a/skynet-src/skynet_start.c +++ b/skynet-src/skynet_start.c @@ -10,6 +10,7 @@ #include #include #include +#include static void * _timer(void *p) { @@ -25,7 +26,7 @@ _worker(void *p) { for (;;) { if (skynet_context_message_dispatch()) { usleep(1000); - } + } } return NULL; } @@ -37,6 +38,7 @@ _start(int thread) { pthread_create(&pid[0], NULL, _timer, NULL); int i; + for (i=1;imaster , config->local)) { + fprintf(stderr, "Init fail : no master"); return; } @@ -78,6 +81,8 @@ skynet_start(struct skynet_config * config) { if (ctx == NULL) { return; } + ctx = skynet_context_new("snlua", "launcher"); + assert(ctx); ctx = skynet_context_new("snlua", config->start); _start(config->thread);