Mon Dec 19 03:16:06 2011 UTC ()
fix killing code I just broke, and give program a chance to cleanup.


(christos)
diff -r1.2 -r1.3 src/external/bsd/atf/dist/atf-run/timer.cpp

cvs diff -r1.2 -r1.3 src/external/bsd/atf/dist/atf-run/Attic/timer.cpp (expand / switch to unified diff)

--- src/external/bsd/atf/dist/atf-run/Attic/timer.cpp 2011/12/18 22:34:06 1.2
+++ src/external/bsd/atf/dist/atf-run/Attic/timer.cpp 2011/12/19 03:16:05 1.3
@@ -118,19 +118,20 @@ impl::child_timer::child_timer(const uns @@ -118,19 +118,20 @@ impl::child_timer::child_timer(const uns
118 timer(seconds), 118 timer(seconds),
119 m_pid(pid), 119 m_pid(pid),
120 m_terminate(terminate) 120 m_terminate(terminate)
121{ 121{
122} 122}
123 123
124impl::child_timer::~child_timer(void) 124impl::child_timer::~child_timer(void)
125{ 125{
126} 126}
127 127
128void 128void
129impl::child_timer::timeout_callback(void) 129impl::child_timer::timeout_callback(void)
130{ 130{
 131 static const timespec ts = { 1, 0 };
131 m_terminate = true; 132 m_terminate = true;
132 133 ::kill(-m_pid, SIGTERM);
133 // Should use killpg(2) but, according to signal(7), using this system 134 ::nanosleep(&ts, NULL);
134 // call in a signal handler context is not safe. 135 if (::kill(-m_pid, 0) != -1)
135 ::killpg(-m_pid, SIGKILL); 136 ::kill(-m_pid, SIGKILL);
136} 137}