diff options
Diffstat (limited to 'debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch')
-rw-r--r-- | debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch b/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch deleted file mode 100644 index 6394e9d..0000000 --- a/debian/patches/700010-Fix-infinite-loop-with-cli-if-netdde-is-killed-with-.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 23ffabdd5b4e62340454884bf1e85c925bcf509b Mon Sep 17 00:00:00 2001 -From: Justus Winter <justus@gnupg.org> -Date: Fri, 26 Feb 2016 16:01:46 +0100 -Subject: [PATCH gnumach 10/10] Fix infinite loop with cli if netdde is killed - with pending irqs - ---- - device/intr.c | 38 +++++++++++++++++--------------------- - 1 file changed, 17 insertions(+), 21 deletions(-) - -diff --git a/device/intr.c b/device/intr.c -index a061d5e..39408ea 100644 ---- a/device/intr.c -+++ b/device/intr.c -@@ -28,8 +28,6 @@ struct intr_entry - typedef struct intr_entry *intr_entry_t; - - static queue_head_t intr_queue; --/* The total number of unprocessed interrupts. */ --static int tot_num_intr; - - /* This function can only be used in the interrupt handler. */ - boolean_t -@@ -37,7 +35,6 @@ queue_intr (struct intr_entry *e) - { - cli (); - e->interrupts++; -- tot_num_intr++; - sti (); - - thread_wakeup ((event_t) &intr_thread); -@@ -251,24 +248,23 @@ intr_thread () - assert_wait ((event_t) &intr_thread, FALSE); - cli (); - -- while (tot_num_intr) -- queue_iterate (&intr_queue, e, struct intr_entry *, chain) -- if (e->interrupts) -- { -- line = e->line; -- dest = e->dest; -- e->interrupts--; -- tot_num_intr--; -- -- sti (); -- deliver_intr (line, dest); -- cli (); -- -- /* We cannot assume that e still exists at this point -- because we released the lock. Hence we restart the -- iteration. */ -- break; -- } -+ restart: -+ queue_iterate (&intr_queue, e, struct intr_entry *, chain) -+ if (e->interrupts) -+ { -+ line = e->line; -+ dest = e->dest; -+ e->interrupts--; -+ -+ sti (); -+ deliver_intr (line, dest); -+ cli (); -+ -+ /* We cannot assume that e still exists at this point -+ because we released the lock. Hence we restart the -+ iteration. */ -+ goto restart; -+ } - - sti (); - thread_block (thread_no_continuation); --- -2.1.4 - |