diff --git a/src/lua/swim.lua b/src/lua/swim.lua index dcb4968e242d63642454cbaa8ff38bfd236db986..d3d6b01e97cb27f993506dadb232572e2f619d1f 100644 --- a/src/lua/swim.lua +++ b/src/lua/swim.lua @@ -338,7 +338,11 @@ end -- local function swim_member_payload_str(m) local ptr = swim_check_member(m, 'member:payload_str()') - return ffi.string(swim_member_payload_raw(ptr)) + local cdata, size = swim_member_payload_raw(ptr) + if size > 0 then + return ffi.string(swim_member_payload_raw(ptr)) + end + return nil end -- @@ -367,7 +371,7 @@ local function swim_member_payload(m) local cdata, size = swim_member_payload_raw(ptr) local ok, result if size == 0 then - result = '' + result = nil else ok, result = pcall(msgpack.decode, cdata, size) if not ok then diff --git a/test/swim/swim.result b/test/swim/swim.result index 53a7cc6a4044d0645a4b093446035fa0ead39db9..dffacd999b5fabfe33a1f9f229b7ed00a6dfb663 100644 --- a/test/swim/swim.result +++ b/test/swim/swim.result @@ -429,11 +429,11 @@ s:payload_cdata() ... s:payload_str() --- -- +- null ... s:payload() --- -- +- null ... s:is_dropped() --- @@ -536,7 +536,7 @@ s:set_payload() ... self:payload() --- -- +- null ... s:set_payload({a = 100}) --- @@ -603,7 +603,7 @@ s:set_payload() ... self:payload() --- -- +- null ... s:set_payload(100) --- @@ -619,7 +619,7 @@ s:set_payload_raw() ... self:payload() --- -- +- null ... -- Raw payload setting can be used when MessagePack is not needed, -- or already encoded. @@ -724,7 +724,7 @@ s1_view = s2:member_by_uuid(uuid(1)) ... s1_view:payload() --- -- +- null ... s1_view:incarnation() --- @@ -878,7 +878,7 @@ s1_self:payload() == p --- - true ... -while s1_view:payload() == '' do fiber.sleep(0.01) end +while not s1_view:payload() do fiber.sleep(0.01) end --- ... p = s1_view:payload() diff --git a/test/swim/swim.test.lua b/test/swim/swim.test.lua index b43160cc470dad2135918badd4f0182c5dc894c2..081d89b3a7f19c3e53e14daa9fe8b0428252a462 100644 --- a/test/swim/swim.test.lua +++ b/test/swim/swim.test.lua @@ -284,7 +284,7 @@ s1:set_payload({a = 100}) p = s1_self:payload() s1_self:payload() == p -while s1_view:payload() == '' do fiber.sleep(0.01) end +while not s1_view:payload() do fiber.sleep(0.01) end p = s1_view:payload() s1_view:payload() == p