diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-04-13 19:33:53 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-04-13 19:33:53 +0200 |
commit | 10a530119e7c39935dbac75d066e9ce5e117ed46 (patch) | |
tree | da0e05b4ffeca98bf9e5ad433e0913802ccfc45d | |
parent | ca348859ebe65ed14011de7880a5c1bf91163891 (diff) |
add fix-console.patch
-rw-r--r-- | debian/patches/fix-console.patch | 142 | ||||
-rw-r--r-- | debian/patches/series | 1 |
2 files changed, 143 insertions, 0 deletions
diff --git a/debian/patches/fix-console.patch b/debian/patches/fix-console.patch new file mode 100644 index 00000000..9872c5b0 --- /dev/null +++ b/debian/patches/fix-console.patch @@ -0,0 +1,142 @@ +diff --git a/console/display.c b/console/display.c +index 8d9e478..09add5c 100644 +--- a/console/display.c ++++ b/console/display.c +@@ -42,6 +42,7 @@ + #include "display.h" + #include "pager.h" + ++#include "notify_S.h" + + struct changes + { +@@ -318,7 +319,7 @@ free_modreqs (struct modreq *mr) + /* A port deleted notification is generated when we deallocate the + user's notify port before it is dead. */ + error_t +-do_mach_notify_port_deleted (mach_port_t notify, mach_port_t name) ++do_mach_notify_port_deleted (struct port_info *pi, mach_port_t name) + { + /* As we cancel the dead-name notification before deallocating the + port, this should not happen. */ +@@ -327,15 +328,16 @@ do_mach_notify_port_deleted (mach_port_t notify, mach_port_t name) + + /* We request dead name notifications for the user ports. */ + error_t +-do_mach_notify_dead_name (mach_port_t notify, mach_port_t dead_name) ++do_mach_notify_dead_name (struct port_info *pi, mach_port_t dead_name) + { +- struct notify *notify_port = ports_lookup_port (notify_bucket, +- notify, notify_class); ++ struct notify *notify_port = (struct notify *) pi; + struct display *display; + struct modreq **preq; + struct modreq *req; + +- if (!notify_port) ++ if (!notify_port ++ || notify_port->pi.bucket != notify_bucket ++ || notify_port->pi.class != notify_class) + return EOPNOTSUPP; + + display = notify_port->display; +@@ -369,30 +371,35 @@ do_mach_notify_dead_name (mach_port_t notify, mach_port_t dead_name) + return 0; + } + +-void do_mach_notify_port_destroyed (void) { assert (0); } ++error_t ++do_mach_notify_port_destroyed (struct port_info *pi, mach_port_t rights) ++{ ++ assert (0); ++} + + error_t +-do_mach_notify_no_senders (mach_port_t port, mach_port_mscount_t count) ++do_mach_notify_no_senders (struct port_info *pi, mach_port_mscount_t count) + { +- return ports_do_mach_notify_no_senders (port, count); ++ return ports_do_mach_notify_no_senders (pi, count); + } + + kern_return_t +-do_mach_notify_send_once (mach_port_t notify) ++do_mach_notify_send_once (struct port_info *pi) + { + return 0; + } + + kern_return_t +-do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) ++do_mach_notify_msg_accepted (struct port_info *pi, mach_port_t send) + { +- struct notify *notify_port = ports_lookup_port (notify_bucket, +- notify, notify_class); ++ struct notify *notify_port = (struct notify *) pi; + struct display *display; + struct modreq **preq; + struct modreq *req; + +- if (!notify_port) ++ if (!notify_port ++ || notify_port->pi.bucket != notify_bucket ++ || notify_port->pi.class != notify_class) + return EOPNOTSUPP; + + /* If we deallocated the send right in display_destroy before the +@@ -401,7 +408,6 @@ do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) + if (!send) + { + assert(0); +- ports_port_deref (notify_port); + return 0; + } + +@@ -418,7 +424,6 @@ do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) + { + assert(0); + pthread_mutex_unlock (&display->lock); +- ports_port_deref (notify_port); + return 0; + } + req = *preq; +@@ -430,7 +435,7 @@ do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) + and stay in pending queue. */ + req->pending = 0; + err = nowait_file_changed (req->port, 0, FILE_CHANGED_WRITE, -1, -1, +- notify); ++ notify_port->pi.port_right); + if (err && err != MACH_SEND_WILL_NOTIFY) + { + mach_port_t old; +@@ -446,7 +451,6 @@ do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) + + mach_port_deallocate (mach_task_self (), req->port); + free (req); +- ports_port_deref (notify_port); + return err; + } + if (err == MACH_SEND_WILL_NOTIFY) +@@ -462,7 +466,6 @@ do_mach_notify_msg_accepted (mach_port_t notify, mach_port_t send) + req->next = display->filemod_reqs; + display->filemod_reqs = req; + pthread_mutex_unlock (&display->lock); +- ports_port_deref (notify_port); + return 0; + } + +diff --git a/console/mutations.h b/console/mutations.h +index 5f26672..c1867a0 100644 +--- a/console/mutations.h ++++ b/console/mutations.h +@@ -24,3 +24,10 @@ + #define IO_DESTRUCTOR end_using_protid_port (protid_t) + + #define TIOCTL_IMPORTS import "priv.h"; ++ ++#define NOTIFY_INTRAN \ ++ port_info_t begin_using_port_info_port (mach_port_t) ++#define NOTIFY_DESTRUCTOR \ ++ end_using_port_info (port_info_t) ++#define NOTIFY_IMPORTS \ ++ import "libports/mig-decls.h"; diff --git a/debian/patches/series b/debian/patches/series index 65769bfb..35132e50 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -42,3 +42,4 @@ xkb-compat.patch xxx-fix-build.patch mach-defpager-protected-payload.patch #ext2fs-skip-unallocated-blocks.patch +fix-console.patch |