diff --git a/src/engine.c b/src/engine.c index 30c443226e3f2e9cdf8bb9aef61adefb9bbff948..920545dfa7c20d032e4ea927bee6a73704d94d50 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1774,6 +1774,20 @@ void engine_split ( struct engine *e , int *grid ) { k -= 1; } } + + /* Re-allocate the local parts. */ + s->size_parts = s->nr_parts * 2; + struct part *parts_new; + struct xpart *xparts_new; + if ( posix_memalign( (void **)&parts_new , part_align , sizeof(struct part) * s->size_parts ) != 0 || + posix_memalign( (void **)&xparts_new , part_align , sizeof(struct xpart) * s->size_parts ) != 0 ) + error( "Failed to allocate new part data." ); + memcpy( parts_new , s->parts , sizeof(struct part) * s->nr_parts ); + memcpy( xparts_new , s->xparts , sizeof(struct xpart) * s->nr_parts ); + free( s->parts ); + free( s->xparts ); + s->parts = parts_new; + s->xparts = xparts_new; }