mirror of
https://codeberg.org/guix/guix.git
synced 2026-01-25 12:05:19 -06:00
gnu: hurd: Fix select for streamio.
* gnu/packages/patches/hurd-streamio-select.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/hurd.scm (hurd): Add patch. Change-Id: I608380fbeab50ebc2e631488488aabf63e6483b4 Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
4a7a397bfa
commit
8c4e05c771
3 changed files with 90 additions and 0 deletions
|
|
@ -1598,6 +1598,7 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/hurd-refcounts-assert.patch \
|
||||
%D%/packages/patches/hurd-rumpdisk-no-hd.patch \
|
||||
%D%/packages/patches/hurd-startup.patch \
|
||||
%D%/packages/patches/hurd-streamio-select.patch \
|
||||
%D%/packages/patches/hurd-proc-zombies.patch \
|
||||
%D%/packages/patches/hwloc-1-test-btrfs.patch \
|
||||
%D%/packages/patches/i3lock-blur-fix-build-on-gcc-10.patch \
|
||||
|
|
|
|||
|
|
@ -347,6 +347,7 @@ Hurd-minimal package which are needed for both glibc and GCC.")
|
|||
(patches (search-patches "hurd-refcounts-assert.patch"
|
||||
"hurd-rumpdisk-no-hd.patch"
|
||||
"hurd-startup.patch"
|
||||
"hurd-streamio-select.patch"
|
||||
"hurd-proc-zombies.patch"))))
|
||||
(version (package-version hurd-headers))
|
||||
(arguments
|
||||
|
|
|
|||
88
gnu/packages/patches/hurd-streamio-select.patch
Normal file
88
gnu/packages/patches/hurd-streamio-select.patch
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
Upstream status: https://lists.gnu.org/archive/html/bug-hurd/2025-12/msg00043.html
|
||||
|
||||
From ffe82c73f89d12393c62d5ba35b06552af40e029 Mon Sep 17 00:00:00 2001
|
||||
From: Yelninei <yelninei@tutamail.com>
|
||||
Date: Sun, 28 Dec 2025 10:59:56 +0000
|
||||
Subject: [PATCH 1/2] streamio (io_select_common): Don't return in case of
|
||||
O_NONBLOCK.
|
||||
|
||||
select should block even when opened with O_NONBLOCK.
|
||||
---
|
||||
trans/streamio.c | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/trans/streamio.c b/trans/streamio.c
|
||||
index d21dc937..2a48d793 100644
|
||||
--- a/trans/streamio.c
|
||||
+++ b/trans/streamio.c
|
||||
@@ -589,12 +589,6 @@ io_select_common (struct trivfs_protid *cred,
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (cred->po->openmodes & O_NONBLOCK)
|
||||
- {
|
||||
- pthread_mutex_unlock (&global_lock);
|
||||
- return EWOULDBLOCK;
|
||||
- }
|
||||
-
|
||||
ports_interrupt_self_on_port_death (cred, reply);
|
||||
err = pthread_hurd_cond_timedwait_np (&select_alert, &global_lock, tsp);
|
||||
if (err)
|
||||
--
|
||||
2.52.0
|
||||
|
||||
From 090062ef555ffc29bcb7afcaad5bb46dad5973e9 Mon Sep 17 00:00:00 2001
|
||||
From: Yelninei <yelninei@tutamail.com>
|
||||
Date: Sun, 28 Dec 2025 11:03:57 +0000
|
||||
Subject: [PATCH 2/2] streamio (io_select_common): Request data if none is
|
||||
available.
|
||||
|
||||
If no data is available immediately start new read/write requests.
|
||||
---
|
||||
trans/streamio.c | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/trans/streamio.c b/trans/streamio.c
|
||||
index 2a48d793..f7cd442f 100644
|
||||
--- a/trans/streamio.c
|
||||
+++ b/trans/streamio.c
|
||||
@@ -190,6 +190,8 @@ error_t dev_write (const void *buf, size_t len, size_t *amount, int nowait);
|
||||
will wait for any activity to cease. */
|
||||
error_t dev_sync (int wait);
|
||||
|
||||
+static error_t start_input (int nowait);
|
||||
+static error_t start_output (int nowait);
|
||||
|
||||
|
||||
static struct argp_option options[] =
|
||||
@@ -589,6 +591,27 @@ io_select_common (struct trivfs_protid *cred,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ if (*type & SELECT_READ)
|
||||
+ {
|
||||
+ err = start_input(1);
|
||||
+ if (err)
|
||||
+ {
|
||||
+ *type = 0;
|
||||
+ pthread_mutex_unlock (&global_lock);
|
||||
+ return err;
|
||||
+ }
|
||||
+ }
|
||||
+ if (*type & SELECT_WRITE)
|
||||
+ {
|
||||
+ err = start_output(1);
|
||||
+ if (err)
|
||||
+ {
|
||||
+ *type = 0;
|
||||
+ pthread_mutex_unlock (&global_lock);
|
||||
+ return err;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
ports_interrupt_self_on_port_death (cred, reply);
|
||||
err = pthread_hurd_cond_timedwait_np (&select_alert, &global_lock, tsp);
|
||||
if (err)
|
||||
--
|
||||
2.52.0
|
||||
|
||||
Loading…
Add table
Reference in a new issue