diff --git a/src/common/pack.c b/src/common/pack.c index 7fbb12500e6afe4926863e1f67d7c0f5ab61102a..2ee6ac3608222eedc30582445336c344316d8bf9 100644 --- a/src/common/pack.c +++ b/src/common/pack.c @@ -49,6 +49,7 @@ */ strong_alias(create_buf, slurm_create_buf); strong_alias(free_buf, slurm_free_buf); +strong_alias(grow_buf, slurm_grow_buf); strong_alias(init_buf, slurm_init_buf); strong_alias(xfer_buf_data, slurm_xfer_buf_data); strong_alias(pack_time, slurm_pack_time); @@ -96,6 +97,13 @@ void free_buf(Buf my_buf) xfree(my_buf); } +/* Grow a buffer by the specified amount */ +void grow_buf (Buf buffer, int size) +{ + buffer->size += size; + xrealloc(buffer->head, buffer->size); +} + /* init_buf - create an empty buffer of the given size */ Buf init_buf(int size) { diff --git a/src/common/pack.h b/src/common/pack.h index 588bca7133e2f525dfd8aab90df4c7f123e1e036..d8f5c791735c5abb3c0801f685d1b0dc11c44226 100644 --- a/src/common/pack.h +++ b/src/common/pack.h @@ -66,6 +66,7 @@ typedef struct slurm_buf * Buf; Buf create_buf (char *data, int size); void free_buf(Buf my_buf); Buf init_buf(int size); +void grow_buf (Buf my_buf, int size); void *xfer_buf_data(Buf my_buf); void pack_time(time_t val, Buf buffer); diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index 6157420897d4ad3528835f6faaf6673be5ad3bef..21fb012ceb034a389239c162525caf2143f2208c 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -3581,9 +3581,13 @@ _unpack_checkpoint_resp_msg(checkpoint_resp_msg_t **msg_ptr, Buf buffer) static void _pack_file_bcast(file_bcast_msg_t * msg , Buf buffer ) { - int i; + int buf_size = 1024, i; xassert ( msg != NULL ); + for (i=0; i<FILE_BLOCKS; i++) + buf_size += msg->block_len[i]; + grow_buf(buffer, buf_size); + pack16 ( msg->block_no, buffer ); pack16 ( msg->last_block, buffer ); pack16 ( msg->force, buffer ); diff --git a/src/common/slurm_xlator.h b/src/common/slurm_xlator.h index 442b53489830b001848d893793843e804d105dbc..e3e15ba47d660d98c4397f02c99b4df29e56b9bc 100644 --- a/src/common/slurm_xlator.h +++ b/src/common/slurm_xlator.h @@ -187,6 +187,7 @@ /* pack.[ch] functions */ #define create_buf slurm_create_buf #define free_buf slurm_free_buf +#define grow_buf slurm_grow_buf #define init_buf slurm_init_buf #define xfer_buf_data slurm_xfer_buf_data #define pack_time slurm_pack_time diff --git a/src/sbcast/agent.c b/src/sbcast/agent.c index d2aaf473591200f2d981a163b787cd25157e1b69..56399d14c1d8c6dc7d018e2cd25492873a728419 100644 --- a/src/sbcast/agent.c +++ b/src/sbcast/agent.c @@ -50,7 +50,7 @@ #include "src/sbcast/sbcast.h" #define MAX_RETRIES 10 -#define MAX_THREADS 3 /* These can be huge messages, so +#define MAX_THREADS 4 /* These can be huge messages, so * only run MAX_THREADS at one time */ typedef struct thd { pthread_t thread; /* thread ID */