http://bugzilla.novell.com/show_bug.cgi?id=540482
http://bugzilla.novell.com/show_bug.cgi?id=540482#c115
--- Comment #115 from Vincent Untz 2009-12-06 00:56:56 UTC ---
I was able to reproduce this here, finally. With some ssh debugging, I can
confirm that the reboot/shutdown process is blocked by chvt not exiting.
chvt itself is blocked on this line:
if (ioctl(fd,VT_WAITACTIVE,num)) {
(which is really the last thing it does before exiting)
Looking at the code, it's indeed racy: it does a VT_ACTIVATE to num, and then
the VT_WAITACTIVE for num. However, nothing guarantees that another VT_ACTIVATE
is sent by another process before the VT_WAITACTIVE...
Looking around, there seems to be various issues with doing this. Some people
are using the patch at [1] to work around the issue -- the wait is simulated in
the user space. The suspend people also implemented a similar workaround in
s2ram [2]. And Debian worked around the issue in their splashy script instead
of doing it in chvt [3].
Does anybody know if it would be acceptable to add a patch like [1] in our kbd
package? This would also imply changing sysvinit to make sure the call to chvt
uses the user space wait.
[1]
http://www.brontes3d.com/opensource/dist/v1.2/overlay/sys-apps/kbd/files/kbd...
[2] http://thread.gmane.org/gmane.linux.kernel.suspend.devel/7117/focus=7119
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=504389
--
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.