[PATCH] debugwireproto: handle unimplemented util.poll() for Windows

Gregory Szorc gregory.szorc at gmail.com
Tue Mar 6 01:58:23 UTC 2018


On Mon, Mar 5, 2018 at 5:48 PM, Matt Harbison <mharbison72 at gmail.com> wrote:

> # HG changeset patch
> # User Matt Harbison <matt_harbison at yahoo.com>
> # Date 1520299354 18000
> #      Mon Mar 05 20:22:34 2018 -0500
> # Node ID 7a25f6cfebe80802321d2975b97fc15ec38cf8ec
> # Parent  2aff6daf779098eee4c350ccd0197dcc2231e197
> debugwireproto: handle unimplemented util.poll() for Windows
>
> This is the same logic used in sshpeer.doublepipe.  It doesn't completely
> fix
> test-ssh-proto{,-unbundle}.t ("read(-1) -> X" is changed to "read(X) ->
> X", the
> order of some lines are changed, and abort messages seem to be missing),
> but it
> cuts down a ton on the failure spew.
>

Queued.

readavailable is intrinsically non-deterministic if there could be data on
both pipes. I think we should rewrite the tests to not use readavailable.

This will likely require new commands in the metalanguage to read specific
amounts from specific pipes. That's probably the only way we make things
deterministic across platforms and various load conditions. I can author
those patches if you want, since I'm actively working in this area and I
did introduce the problem :)


>
> diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
> --- a/mercurial/debugcommands.py
> +++ b/mercurial/debugcommands.py
> @@ -2818,11 +2818,16 @@
>          elif action == 'close':
>              peer.close()
>          elif action == 'readavailable':
> -            fds = util.poll([stdout.fileno(), stderr.fileno()])
> -
> -            if stdout.fileno() in fds:
> +            fds = [stdout.fileno(), stderr.fileno()]
> +            try:
> +                act = util.poll(fds)
> +            except NotImplementedError:
> +                # non supported yet case, assume all have data.
> +                act = fds
> +
> +            if stdout.fileno() in act:
>                  util.readpipe(stdout)
> -            if stderr.fileno() in fds:
> +            if stderr.fileno() in act:
>                  util.readpipe(stderr)
>          elif action == 'readline':
>              stdout.readline()
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-devel/attachments/20180305/86fd4e38/attachment-0002.html>


More information about the Mercurial-devel mailing list