commit 100eb9e53f441a1d6c6e7db55f735778d67bf504
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sun Jul 19 14:18:16 2020 +0200

    device intr: Fix reference leak
    
    On RPC success we have to release the passed send rights, otherwise
    references accumulate and we never notice when the receiver dies.
    
    * device/ds_routines.c (ds_device_intr_ack): On success, call
    ipc_port_release_send on the notification receive port.

Index: gnumach/device/ds_routines.c
===================================================================
--- gnumach.orig/device/ds_routines.c
+++ gnumach/device/ds_routines.c
@@ -414,6 +414,7 @@ ds_device_intr_ack (device_t dev, ipc_po
   return D_INVALID_OPERATION;
 #else /* MACH_XEN */
   mach_device_t mdev = dev->emul_data;
+  kern_return_t ret;
 
   /* Refuse if device is dead or not completely open.  */
   if (dev == DEVICE_NULL)
@@ -423,7 +424,12 @@ ds_device_intr_ack (device_t dev, ipc_po
   if (! name_equal(mdev->dev_ops->d_name, 3, "irq"))
     return D_INVALID_OPERATION;
 
-  return irq_acknowledge(receive_port);
+  ret = irq_acknowledge(receive_port);
+
+  if (ret == D_SUCCESS)
+    ipc_port_release_send(receive_port);
+
+  return ret;
 #endif /* MACH_XEN */
 }
 
