[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
kbd.diff (X loses keyboard on trivial operation)
From: |
David Walter |
Subject: |
kbd.diff (X loses keyboard on trivial operation) |
Date: |
Mon, 28 Oct 2002 14:55:29 -0500 |
User-agent: |
Gnus/5.090007 (Oort Gnus v0.07) XEmacs/21.4 (Honest Recruiter, hurd-i386-debian) |
X loses keyboard on trivial operation
ls -l /dev/kbd
The kbd translator formerly believed it needed to start a new thread
for every open call. It also _closed_ the device after every
corresponding close_hook call.
2002-10-28 David Walter <dwalter@syr.edu>
* kbd.c (trivfs_goaway): moved device_close from close_hook to
here.
* kbd.c : removed close_hook
* kbd.c (main): moved thread create from open_hook (one thread per
open) to main, one device master thread per process.
--- /ryojusen/opt/src/hurd-20021011/trans/kbd.c 2002-10-28 14:32:39.000000000
-0500
+++ /opt/hurd/trans/kbd.c 2002-10-28 14:34:46.000000000 -0500
@@ -112,29 +112,13 @@
err = device_open (master, D_READ, "kbd", &kbd.port);
mach_port_deallocate (mach_task_self (), master);
}
- kbd.cnt = 0;
-
- cthread_detach (cthread_fork (kbd_thread, 0));
-
mutex_unlock (&kbd.lock);
return err;
}
-static void
-close_hook (struct trivfs_peropen *po)
-{
- int cnt = 1;
- int mode = KB_ASCII;
-
- device_set_status (kbd.port, KDSKBDMODE, (dev_status_t) & mode, cnt);
- device_close (kbd.port);
- kbd.port = MACH_PORT_NULL;
-}
-
/* Trivfs hooks */
error_t (*trivfs_peropen_create_hook) (struct trivfs_peropen *) = open_hook;
-void (*trivfs_peropen_destroy_hook) (struct trivfs_peropen *) = close_hook;
int
main (int argc, char **argv)
@@ -153,6 +137,9 @@
error (3, err, "Contacting parent");
/* Launch. */
mutex_init (&kbd.lock);
+
+ kbd.cnt = 0;
+ cthread_detach (cthread_fork (kbd_thread, 0));
ports_manage_port_operations_multithread (fsys->pi.bucket, demuxer,
2 * 60 * 1000, 0, 0);
@@ -185,6 +172,11 @@
error_t
trivfs_goaway (struct trivfs_control *fsys, int flags)
{
+ int cnt = 1;
+ int mode = KB_ASCII;
+ device_set_status (kbd.port, KDSKBDMODE, (dev_status_t) & mode, cnt);
+ device_close (kbd.port);
+ kbd.port = MACH_PORT_NULL;
exit (0);
}
--
/^\
\ / ASCII RIBBON CAMPAIGN
X AGAINST HTML MAIL
/ \
Public Key Server (pgp.dtype.org) -- Index 'dwalter@syr.edu'
Type bits /keyID Date User ID
pub 1024D/DC92AE30 2002/02/26 David Walter <dwalter@syr.edu>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- kbd.diff (X loses keyboard on trivial operation),
David Walter <=