X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/86051ed1b66342bae0e21fd6643e66331ac2c07d..d81bfef53a840704ead6eca438d96ee1129b70dd:/tools/tesh/run_context.h diff --git a/tools/tesh/run_context.h b/tools/tesh/run_context.h index 1f496d74a6..ae8ff5dd80 100644 --- a/tools/tesh/run_context.h +++ b/tools/tesh/run_context.h @@ -13,15 +13,20 @@ #include "tesh.h" +typedef enum {e_output_check, e_output_display, e_output_ignore} e_output_handling_t; + + typedef struct { /* kind of job */ char *cmd; + char **env; + int env_size; + char *filepos; int pid; int is_background:1; int is_empty:1; int is_stoppable:1; - int check_output:1; - + int brokenpipe:1; int timeout:1; @@ -29,18 +34,27 @@ typedef struct { the child is dead. The main thread use it to detect that the child is not dead before the end of timeout */ + int interrupted:1; /* Whether we got stopped by an armageddon */ + xbt_os_mutex_t interruption; /* To allow main thread to kill a runner + one only at certain points */ + + e_output_handling_t output; + + int status; + /* expected results */ int end_time; /* begin_time + timeout, as epoch */ char* expected_signal; /* name of signal to raise (or NULL if none) */ int expected_return; /* the exepeted return code of following command */ /* buffers */ - buff_t input; - buff_t output_wanted; - buff_t output_got; + xbt_strbuff_t input; + xbt_strbuff_t output_wanted; + xbt_strbuff_t output_got; /* Threads */ - xbt_thread_t writer, reader; /* IO handlers */ + xbt_os_thread_t writer, reader; /* IO handlers */ + xbt_os_thread_t runner; /* Main thread, counting for timeouts */ /* Pipes from/to the child */ int child_to, child_from; @@ -50,17 +64,23 @@ typedef struct { /* module mgmt */ void rctx_init(void); void rctx_exit(void); - + /* wait for all currently running background jobs */ void rctx_wait_bg(void); +/* kill forcefully all currently running background jobs */ +extern rctx_t armageddon_initiator; +extern xbt_os_mutex_t armageddon_mutex; +void rctx_armageddon(rctx_t initiator, int exitcode); + + /* create a new empty running context */ rctx_t rctx_new(void); void rctx_free(rctx_t rctx); void rctx_empty(rctx_t rc); /*reset to empty*/ void rctx_dump(rctx_t rctx,const char *str); - - + + /* Launch the current command */ void rctx_start(void); /* Wait till the end of this command */