[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/4] libmachdev: Spawn a thread for server loop so main pathw
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 2/4] libmachdev: Spawn a thread for server loop so main pathway can continue |
Date: |
Tue, 2 Mar 2021 22:13:18 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Samuel
Damien Zammit, le mar. 02 mars 2021 22:41:35 +1100, a ecrit:
> ---
> libmachdev/trivfs_server.c | 31 ++++++++++++++++++++++++-------
> 1 file changed, 24 insertions(+), 7 deletions(-)
>
> diff --git a/libmachdev/trivfs_server.c b/libmachdev/trivfs_server.c
> index 3ab15049..06756f82 100644
> --- a/libmachdev/trivfs_server.c
> +++ b/libmachdev/trivfs_server.c
> @@ -398,7 +398,8 @@ machdev_trivfs_init(mach_port_t bootstrap_resume_task,
> const char *name, const c
> if (path)
> devnode = strdup(path);
> resume_bootstrap_server(bootstrap_resume_task, name);
> - *bootstrap = MACH_PORT_NULL;
> + *bootstrap = ports_get_send_right (&control->pi);
> +
> /* We need to install as a translator later */
> bootstrapped = TRUE;
> }
> @@ -479,13 +480,29 @@ trivfs_modify_stat (struct trivfs_protid *cred,
> io_statbuf_t *stat)
> {
> }
>
> +static void *
> +machdev_trivfs_loop(void *arg)
> +{
> + struct trivfs_control *fsys = (struct trivfs_control *)arg;
> +
> + /* Launch. */
> + do
> + {
> + ports_manage_port_operations_one_thread (port_bucket, demuxer, 0);
> + } while (trivfs_goaway (fsys, 0));
> +
> + /* Never reached */
> + return 0;
> +}
> +
> void
> machdev_trivfs_server(mach_port_t bootstrap)
> {
> struct trivfs_control *fsys = NULL;
> int err;
> + pthread_t t;
>
> - if (bootstrap != MACH_PORT_NULL)
> + if (bootstrapped == FALSE)
> {
> /* This path is executed when a parent exists */
> err = trivfs_startup (bootstrap, 0,
> @@ -500,9 +517,9 @@ machdev_trivfs_server(mach_port_t bootstrap)
> fsys = control;
> }
>
> - /* Launch. */
> - do
> - {
> - ports_manage_port_operations_one_thread (port_bucket, demuxer, 0);
> - } while (trivfs_goaway (fsys, 0));
> + err = pthread_create (&t, NULL, machdev_trivfs_loop, (void *)fsys);
> + if (err)
> + error (1, err, "Creating machdev server thread");
> + pthread_detach (t);
> }
> +
> --
> 2.30.0
>
>
--
Samuel
quit When the quit statement is read, the bc processor
is terminated, regardless of where the quit state-
ment is found. For example, "if (0 == 1) quit"
will cause bc to terminate.
(Seen in the manpage for "bc". Note the "if" statement's logic)
- [PATCH x4] hurd: pci-arbiter and rumpdisk static server support, Damien Zammit, 2021/03/02
- [PATCH 1/4] libnetfs: Behave more like diskfs_startup_diskfs, Damien Zammit, 2021/03/02
- [PATCH 2/4] libmachdev: Spawn a thread for server loop so main pathway can continue, Damien Zammit, 2021/03/02
- Re: [PATCH 2/4] libmachdev: Spawn a thread for server loop so main pathway can continue,
Samuel Thibault <=
- [PATCH 3/4] Bootstrappable pci-arbiter, Damien Zammit, 2021/03/02
- [PATCH 4/4] rumpdisk: Don't pretend to be the arbiter anymore, Damien Zammit, 2021/03/02
- Re: [PATCH x4] hurd: pci-arbiter and rumpdisk static server support, Samuel Thibault, 2021/03/02