summaryrefslogtreecommitdiff
path: root/xmake/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-05 23:28:26 +0800
committerruki <[email protected]>2022-04-05 23:28:26 +0800
commit934d15f424106a6426641f4fa067382b51978b45 (patch)
tree3303314ba74eb623f53d1580406692b6740b3e9c /xmake/modules
parent94dfcf46a3393392b83727cba39cf8639e9c3470 (diff)
lock server
Diffstat (limited to 'xmake/modules')
-rw-r--r--xmake/modules/private/service/server.lua9
1 files changed, 9 insertions, 0 deletions
diff --git a/xmake/modules/private/service/server.lua b/xmake/modules/private/service/server.lua
index 56441ef30..d627076d7 100644
--- a/xmake/modules/private/service/server.lua
+++ b/xmake/modules/private/service/server.lua
@@ -67,6 +67,15 @@ end
-- run main loop
function server:runloop()
assert(self._HANDLER, "no handler found!")
+
+ -- ensure only one server process
+ local lockfile = os.tmpfile(tostring(self)) .. ".lock"
+ local lock = io.openlock(lockfile)
+ if not lock:trylock() then
+ raise("%s: has been started!", self)
+ end
+
+ -- run loop
local sock = socket.bind(self:addr(), self:port())
sock:listen(100)
print("%s: listening %s:%d ..", self, self:addr(), self:port())