Fix service autostart hang if a service was already active

This commit is contained in:
20kdc 2018-04-25 19:52:23 +01:00
parent 0b918437d0
commit bed9f55d70
2 changed files with 25 additions and 29 deletions

View File

@ -268,35 +268,33 @@ rootAccess.securityPolicy = function (pid, proc, perm, req)
secPolicyStage2(pid, proc, perm, req)
end
-- Do we need to start it?
if perm:sub(1, 6) == "x.svc." then
if not neo.usAccessExists(perm) then
local appAct = perm:sub(7)
local paP = appAct:match(endAcPattern)
if paP then
appAct = appAct:sub(1, #appAct - #paP)
end
-- Prepare for success
onReg[perm] = onReg[perm] or {}
table.insert(onReg[perm], function ()
finish()
end)
pcall(neo.executeAsync, "svc-" .. appAct)
-- Fallback "quit now"
local time = os.uptime() + 30
neo.scheduleTimer(time)
local f
function f()
if finish then
if os.uptime() >= time then
finish()
else
table.insert(todo, f)
end
if perm:sub(1, 6) == "x.svc." and not neo.usAccessExists(perm) then
local appAct = perm:sub(7)
local paP = appAct:match(endAcPattern)
if paP then
appAct = appAct:sub(1, #appAct - #paP)
end
-- Prepare for success
onReg[perm] = onReg[perm] or {}
table.insert(onReg[perm], function ()
finish()
end)
pcall(neo.executeAsync, "svc-" .. appAct)
-- Fallback "quit now"
local time = os.uptime() + 30
neo.scheduleTimer(time)
local f
function f()
if finish then
if os.uptime() >= time then
finish()
else
table.insert(todo, f)
end
end
table.insert(todo, f)
return
end
table.insert(todo, f)
return
else
finish()
end

View File

@ -335,9 +335,7 @@ baseProcNeo = {
listLibs = lister("libs/"),
usAccessExists = function (accessName)
ensureType(accessName, "string")
if accesses[accessName] then
return true
end
return not not accesses[accessName]
end,
totalIdleTime = function () return idleTime end,
ensurePath = ensurePath,