From 4b1f056103a7b1a3b803404d04dd1fdb4e1fb1ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20N=27gadi?= Date: Sat, 4 Nov 2017 10:34:04 +0100 Subject: [PATCH] fix(timeout): Fix server timeout problems (clock too slow) under rare conditions --- server/common.lua | 26 ++------------------------ server/functions.lua | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/server/common.lua b/server/common.lua index 4bde6732..034d0921 100644 --- a/server/common.lua +++ b/server/common.lua @@ -3,7 +3,8 @@ ESX.Players = {} ESX.UsableItemsCallbacks = {} ESX.Items = {} ESX.ServerCallbacks = {} -ESX.TimeoutCallbacks = {} +ESX.TimeoutCount = -1 +ESX.CancelledTimeouts = {} ESX.LastPlayerData = {} ESX.Pickups = {} ESX.PickupId = 0 @@ -76,26 +77,3 @@ AddEventHandler('esx:triggerServerCallback', function(name, requestId, ...) end) --- SetTimeout -CreateThread(function() - while true do - - Wait(0) - - local currTime = os.clock() * 1000 - - for i=1, #ESX.TimeoutCallbacks, 1 do - - if ESX.TimeoutCallbacks[i] ~= nil then - - if currTime >= ESX.TimeoutCallbacks[i].time then - ESX.TimeoutCallbacks[i].cb() - ESX.TimeoutCallbacks[i] = nil - end - - end - - end - - end -end) diff --git a/server/functions.lua b/server/functions.lua index f5dfb5ed..3b90a58b 100644 --- a/server/functions.lua +++ b/server/functions.lua @@ -27,15 +27,25 @@ ESX.GetRandomString = function(length) end ESX.SetTimeout = function(msec, cb) - table.insert(ESX.TimeoutCallbacks, { - time = os.clock() * 1000 + msec, - cb = cb - }) - return #ESX.TimeoutCallbacks + + local id = ESX.TimeoutCount + 1 + + SetTimeout(msec, function() + + if ESX.CancelledTimeouts[id] then + ESX.CancelledTimeouts[id] = nil + else + cb() + end + + end) + + return id + end -ESX.ClearTimeout = function(i) - ESX.TimeoutCallbacks[i] = nil +ESX.ClearTimeout = function(id) + ESX.CancelledTimeouts[id] = true end ESX.RegisterServerCallback = function(name, cb)