Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fast commands with timeout always hit timeout #344

Closed
nicholascapo opened this issue Dec 2, 2016 · 2 comments
Closed

Fast commands with timeout always hit timeout #344

nicholascapo opened this issue Dec 2, 2016 · 2 comments

Comments

@nicholascapo
Copy link

nicholascapo commented Dec 2, 2016

Fast commands with timeout always hit timeout:

import sh
sh.bash('-c', 'exit 0', _timeout=5)
Exception in thread background thread for pid 27690:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "sh/sh.py", line 2159, in background_thread
    timeout_fn()
  File "sh/sh.py", line 1913, in timeout_fn
    self.signal(ca["timeout_signal"])
  File "sh/sh.py", line 2004, in signal
    os.kill(self.pid, sig)
OSError: [Errno 3] No such process

Traceback (most recent call last):
  File "./repro.py", line 4, in <module>
    sh.bash('-c', 'exit 0', _timeout=5)
  File "sh/sh.py", line 1245, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "sh/sh.py", line 633, in __init__
    self.wait()
  File "sh/sh.py", line 648, in wait
    raise TimeoutException(-exit_code)
sh.TimeoutException

git bisect start 1.12.5 1.11 with the above repro script:
4d6594b is the first bad commit
commit 4d6594b
Author: Andrew Moffat [email protected]
Date: Thu Dec 1 00:14:47 2016 -0600

wait on the bg thread, like we do the other threads
@amoffat
Copy link
Owner

amoffat commented Dec 2, 2016

it's the same underlying issue as reported here #340. the temporary workaround is to remove the timeout. i should have a fix out later today

amoffat pushed a commit that referenced this issue Dec 2, 2016
@amoffat
Copy link
Owner

amoffat commented Dec 2, 2016

the issue is fixed on the latest release, 1.12.6

@amoffat amoffat closed this as completed Dec 2, 2016
0-wiz-0 added a commit to NetBSD/pkgsrc-wip that referenced this issue Dec 12, 2016
*   added `_out` and `_out_bufsize` validator [#346](amoffat/sh#346)
*   bugfix for internal stdout thread running when it shouldn't [#346](amoffat/sh#346)

*   regression bugfix on timeout [#344](amoffat/sh#344)
*   regression bugfix on `_ok_code=None`

*   further improvements on cpu usage

*   regression in cpu usage [#339](amoffat/sh#339)

*   fd leak regression and fix for flawed fd leak detection test [#337](amoffat/sh#337)

*   support for `io.StringIO` in python2

*   added support for using raw file descriptors for `_in`, `_out`, and `_err`
*   removed `.close()`ing `_out` handler if FIFO detected

*   composed commands no longer propagate `_bg`
*   better support for using `sys.stdin` and `sys.stdout` for `_in` and `_out`
*   bugfix where `which()` would not stop searching at the first valid executable found in PATH
*   added `_long_prefix` for programs whose long arguments start with something other than `--` [#278](amoffat/sh#278)
*   added `_log_msg` for advanced configuration of log message [#311](amoffat/sh#311)
*   added `sh.contrib.sudo`
*   added `_arg_preprocess` for advanced command wrapping
*   alter callable `_in` arguments to signify completion with falsy chunk
*   bugfix where pipes passed into `_out` or `_err` were not flushed on process end [#252](amoffat/sh#252)
*   deprecated `with sh.args(**kwargs)` in favor of `sh2 = sh(**kwargs)`
*   made `sh.pushd` thread safe
*   added `.kill_group()` and `.signal_group()` methods for better process control [#237](amoffat/sh#237)
*   added `new_session` special keyword argument for controlling spawned process session [#266](amoffat/sh#266)
*   bugfix better handling for EINTR on system calls [#292](amoffat/sh#292)
*   bugfix where with-contexts were not threadsafe [#247](amoffat/sh#195)
*   `_uid` new special keyword param for specifying the user id of the process [#133](amoffat/sh#133)
*   bugfix where exceptions were swallowed by processes that weren't waited on [#309](amoffat/sh#309)
*   bugfix where processes that dupd their stdout/stderr to a long running child process would cause sh to hang [#310](amoffat/sh#310)
*   improved logging output [#323](amoffat/sh#323)
*   bugfix for python3+ where binary data was passed into a process's stdin [#325](amoffat/sh#325)
*   Introduced execution contexts which allow baking of common special keyword arguments into all commands [#269](amoffat/sh#269)
*   `Command` and `which` now can take an optional `paths` parameter which specifies the search paths [#226](amoffat/sh#226)
*   `_preexec_fn` option for executing a function after the child process forks but before it execs [#260](amoffat/sh#260)
*   `_fg` reintroduced, with limited functionality.  hurrah! [#92](amoffat/sh#92)
*   bugfix where a command would block if passed a fd for stdin that wasn't yet ready to read [#253](amoffat/sh#253)
*   `_long_sep` can now take `None` which splits the long form arguments into individual arguments [#258](amoffat/sh#258)
*   making `_piped` perform "direct" piping by default (linking fds together).  this fixes memory problems [#270](amoffat/sh#270)
*   bugfix where calling `next()` on an iterable process that has raised `StopIteration`, hangs [#273](amoffat/sh#273)
*   `sh.cd` called with no arguments no changes into the user's home directory, like native `cd` [#275](amoffat/sh#275)
*   `sh.glob` removed entirely.  the rationale is correctness over hand-holding. [#279](amoffat/sh#279)
*   added `_truncate_exc`, defaulting to `True`, which tells our exceptions to truncate output.
*   bugfix for exceptions whose messages contained unicode
*   `_done` callback no longer assumes you want your command put in the background.
*   `_done` callback is now called asynchronously in a separate thread.
*   `_done` callback is called regardless of exception, which is necessary in order to release held resources, for example a process pool
apevec pushed a commit to softwarefactory-project/DLRN that referenced this issue Feb 15, 2017
The upstream issue (amoffat/sh#344) has
been fixed in version 1.12.6.

Change-Id: I0970cbc950e8fc478c56a1ad84a74550de42fe1f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants