From e0fbaf3a2ec1defbf0b21a7f07217f7a508b51fa Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 6 Dec 2014 09:31:08 +0100 Subject: fixed some segfaults in master when writing output from workers --- src/master.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/master.c b/src/master.c index 0c59db1..fafbbbe 100644 --- a/src/master.c +++ b/src/master.c @@ -317,6 +317,8 @@ static int master_output_init( const char *spool_dir, const char *name ) char filename[1024]; worker_t *worker = worker_by_name( name ); + if( worker == NULL ) return 0; + snprintf( filename, sizeof( filename ), "%s%c%s.output", spool_dir, PORT_DIR_SEPARATOR, worker->name ); @@ -329,6 +331,9 @@ static int master_output_init( const char *spool_dir, const char *name ) static int master_output_free( const char *name ) { worker_t *worker = worker_by_name( name ); + + if( worker == NULL ) return 0; + execution_worker_data_t *wed = (execution_worker_data_t *)worker->execution_data; if( wed->spool_file != NULL ) { @@ -339,10 +344,18 @@ static int master_output_free( const char *name ) return 0; } -static int master_output_write( const char *name, const char *msg ) +static int master_output_write( const char *spool_dir, const char *name, const char *msg ) { - worker_t *worker = worker_by_name( name ); - execution_worker_data_t *wed = (execution_worker_data_t *)worker->execution_data; + worker_t *w = worker_by_name( name ); + + if( w == NULL ) return 0; + + execution_worker_data_t *wed = (execution_worker_data_t *)w->execution_data; + + if( wed->spool_file == NULL ) { + master_output_init( spool_dir, name ); + if( wed->spool_file == NULL ) return 0; + } fputs( msg, wed->spool_file ); fflush( wed->spool_file ); @@ -471,7 +484,7 @@ NEXT_COMMAND: json_object *msg_obj; json_object_object_get_ex( recv_obj, "msg", &msg_obj ); const char *msg = json_object_get_string( msg_obj ); - master_output_write( worker, msg ); + master_output_write( tdata->spool_dir, worker, msg ); } else { fprintf( stderr, "WARNING: master received unkown message: %s\n", answer ); } -- cgit v1.2.3-54-g00ecf