Hi there,
I am currently working on a python script that makes use of the python-lxc
library (lxc version is the current git version). I had a timer running that
would stop the container if the attach_wait method took to long to return.
However the event was not triggered before the attach_wait method returned no
matter how long this took.
As far as I know the problem can be fixed by making the
Container_attach_and_possibly_wait function in python-lxc/lxc.c GIL-aware.
Tested this with the script provided below and it worked fine for me.
Here is a minimal python script which should be able to reproduce the problem
given a running container "test":
import lxc
import threading
def event():
print("Hello")
def main():
container = lxc.Container("test")
timer = threading.Timer(2, event)
timer.start()
container.attach_wait(lxc.attach_run_command, ["/bin/sleep", "7"])
print("all done")
if __name__ == "__main__":
main()
On my system both prints were executed after approx 7 secs.
After applying the following changes to lcx.c the "Hello" string was printed
correctly approx 5 secs ahead of "all done":
in Container_attach_and_possibly_wait starting at line 583:
if (wait) {
Py_BEGIN_ALLOW_THREADS
ret = lxc_wait_for_pid_status(pid);
Py_END_ALLOW_THREADS
(...)
I hope this was helpful.
Regards,
Dorian Eikenberg
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel