-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathTestSignal_bad.lua
68 lines (56 loc) · 1.49 KB
/
TestSignal_bad.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
-- TestSignal_bad.lua
--[[
NOTE!
- this code crashes after few thousand signals because of re-entrant problems in signalHandler()
- http://mikeash.com/pyblog/friday-qa-2011-04-01-signal-handling.html
]]
print()
print(" -- TestSignal_bad.lua start -- ")
print()
local arg = {...}
local util = require "lib_util"
local sig = require "lib_signal"
local ffi = require "ffi"
local C = ffi.C
local signalCatchCount = 0
local prsToSignal = tonumber(arg[1]) or 0
local signalSendCount = tonumber(arg[2]) or 1000
local pid = C.getpid()
print("pid : "..pid)
local function signalHandler()
signalCatchCount = signalCatchCount + 1
print("signalHandler(): "..signalCatchCount)
end
local function signalHandlerSet(signal, signalHandlerFunc)
C.signal(signal, signalHandlerFunc)
end
local function signalSend(prsToSignal, signal)
C.kill(prsToSignal, signal)
end
local function signalPause()
C.pause()
end
if prsToSignal == 0 then
print("signal repeat start")
sig.signalHandlerSet(SIGUSR1, signalHandler)
local i = 0
repeat
i = i + 1
print("signalHandlerSet() start: "..i)
--print("signalPause()")
sig.signalPause()
until false
print("signal repeat after")
C.kill(pid, SIGUSR1) -- will cause signalCatch() to run
print("signal end")
else
for i=1,signalSendCount do
print("signalSend(prsToSignal, SIGUSR1) start: "..i)
sig.signalSend(prsToSignal, SIGUSR1)
util.yield() --nanosleep(0, 1) -- sleep(0)
end
--C.kill(prsToSignal, SIGINT)
end
print()
print(" -- TestSignal_bad.lua end -- ")
print()