Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Give tesh the ability to get the CWD to use from the --cd command line argument
[simgrid.git] / tools / tesh / run_context.h
index 1f496d7..ae8ff5d 100644 (file)
 
 #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 */