diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 9ef95974..e29da6c4 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -131,15 +131,13 @@ function skynet.sleep(ti) end function skynet.yield() - local session = c.command("TIMEOUT","0") - assert(session) - coroutine_yield("SLEEP", tonumber(session)) - sleep_session[coroutine.running()] = nil + return skynet.sleep("0") end function skynet.wait() local session = c.genid() coroutine_yield("SLEEP", session) + c.trace_switch(trace_handle, session) local co = coroutine.running() sleep_session[co] = nil session_id_coroutine[session] = nil @@ -294,7 +292,6 @@ local function dispatch_message(prototype, msg, sz, session, source, ...) if co == "BREAK" then session_id_coroutine[session] = nil elseif co == nil then - c.trace_switch(trace_handle, session) unknown_response(session, source, msg, sz) else c.trace_switch(trace_handle, session) diff --git a/service/testtrace.lua b/service/testtrace.lua new file mode 100644 index 00000000..adedc634 --- /dev/null +++ b/service/testtrace.lua @@ -0,0 +1,28 @@ +local skynet = require "skynet" + +local trace_cache = {} + +skynet.trace_callback(function(handle, ti) + -- skynet will call this function when the thread which create handle(traceid) end, and pass the time (ti) + print("TRACE",trace_cache[handle],ti) + trace_cache[handle] = nil +end) + +local function f (i) + -- create a trace object + local traceid = skynet.trace() + -- name traceid in trace_cache[] + trace_cache[traceid] = "thread " .. i + + for i=1,i do + skynet.sleep(i) + end +end + +skynet.start(function() + for i = 1 , 100 do + skynet.fork(f, i) + end +end) + +