Quoting Jan Kiszka (jan.kis...@siemens.com): > Allow to specify a timeout for waiting on state changes via lxc-wait. > Helpful for scripts that need to handle errors or excessive delays in > state changing procedures.
Hi, in our lxc-api tree (https://code.launchpad.net/~ubuntu-lxc/ubuntu/quantal/lxc/lxc-api-and-python/) I've added changed src/lxc/state.c:lxc_wait() to take an optional timeout value (0 means don't wait, -1 means wait forever), and use select, to implement wait with timeout. It is only used by our lxc_container->wait, not by src/lxc/lxc_wait.c which in our tree passes in -1 to wait forever. Ideally our patches would be combined. > Signed-off-by: Jan Kiszka <jan.kis...@siemens.com> > --- > doc/lxc-wait.sgml.in | 11 +++++++++++ > src/lxc/arguments.h | 1 + > src/lxc/lxc_wait.c | 16 +++++++++++++++- > 3 files changed, 27 insertions(+), 1 deletions(-) > > diff --git a/doc/lxc-wait.sgml.in b/doc/lxc-wait.sgml.in > index 97a4c39..f30e0c3 100644 > --- a/doc/lxc-wait.sgml.in > +++ b/doc/lxc-wait.sgml.in > @@ -79,6 +79,17 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA > 02111-1307 USA > </listitem> > </varlistentry> > > + <varlistentry> > + <term> > + <option>-t <replaceable>timeout</replaceable></option> > + </term> > + <listitem> > + <para> > + Wait timeout seconds for desired state to be reached. > + </para> > + </listitem> > + </varlistentry> > + > </variablelist> > > </refsect1> > diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h > index 40f0d6c..3c9d28f 100644 > --- a/src/lxc/arguments.h > +++ b/src/lxc/arguments.h > @@ -57,6 +57,7 @@ struct lxc_arguments { > > /* for lxc-wait */ > char *states; > + long timeout; > > /* close fds from parent? */ > int close_all_fds; > diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c > index a58e0c8..d7a69bc 100644 > --- a/src/lxc/lxc_wait.c > +++ b/src/lxc/lxc_wait.c > @@ -24,6 +24,8 @@ > #include <string.h> > #include <libgen.h> > #include <unistd.h> > +#include <stdlib.h> > +#include <signal.h> > #include <sys/types.h> > > #include <lxc/lxc.h> > @@ -46,12 +48,14 @@ static int my_parser(struct lxc_arguments* args, int c, > char* arg) > { > switch (c) { > case 's': args->states = optarg; break; > + case 't': args->timeout = atol(optarg); break; > } > return 0; > } > > static const struct option my_longopts[] = { > {"state", required_argument, 0, 's'}, > + {"timeout", required_argument, 0, 't'}, > LXC_COMMON_OPTIONS > }; > > @@ -66,7 +70,8 @@ Options :\n\ > -n, --name=NAME NAME for name of the container\n\ > -s, --state=STATE ORed states to wait for\n\ > STOPPED, STARTING, RUNNING, STOPPING,\n\ > - ABORTING, FREEZING, FROZEN\n", > + ABORTING, FREEZING, FROZEN\n\ > + -t, --timeout=TMO Seconds to wait for state changes\n", > .options = my_longopts, > .parser = my_parser, > .checker = my_checker, > @@ -91,6 +96,11 @@ static int fillwaitedstates(char *strstates, int *states) > return 0; > } > > +static void timeout_handler(int signal) > +{ > + exit(-1); > +} > + > int main(int argc, char *argv[]) > { > struct lxc_msg msg; > @@ -124,6 +134,9 @@ int main(int argc, char *argv[]) > goto out_close; > } > > + signal(SIGALRM, timeout_handler); > + alarm(my_args.timeout); > + > for (;;) { > if (lxc_monitor_read(fd, &msg) < 0) > goto out_close; > @@ -140,6 +153,7 @@ int main(int argc, char *argv[]) > } > > if (s[msg.value]) { > + alarm(0); > ret = 0; > goto out_close; > } > -- > 1.7.3.4 > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Lxc-devel mailing list > Lxc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/lxc-devel ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel