bug-hurd
[Top][All Lists]
Advanced

[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>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]