diff --git a/src/space.c b/src/space.c index a9958f6fbd7d85060db99a9682b0de10f507085d..9c163fede0635a272c28ac7b2645eabeffced047 100644 --- a/src/space.c +++ b/src/space.c @@ -1269,6 +1269,12 @@ void space_split_mapper(void *map_data, int num_elements, void *extra_data) { atomic_cas(&s->maxdepth, maxdepth, c->depth); } + /* If the depth is too large, we have a problem and should stop. */ + if (s->maxdepth > space_cell_maxdepth) { + error("Exceeded maximum depth (%d) when splitting cells, aborting", + space_cell_maxdepth); + } + /* Split or let it be? */ if (count > space_splitsize || gcount > space_splitsize) { diff --git a/src/space.h b/src/space.h index 72b17405f13766ad2ccc9d53712068f28172067b..5332bc9fb5a7142f251d3ffd28dde6fac5211ea5 100644 --- a/src/space.h +++ b/src/space.h @@ -44,6 +44,9 @@ #define space_stretch 1.10f #define space_maxreldx 0.25f +/* Maximum allowed depth of cell splits. */ +#define space_cell_maxdepth 52 + /* Split size. */ extern int space_splitsize; extern int space_maxsize;