X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fsparse-xarray.c;h=5168d87922f46fb62b317b89172f4d6831f9acc8;hb=feba48309a227fe40feb3a87cbe900015021ac73;hp=0cc91c63cd1fa9ab7d34b36e5d50b2b44d7573b5;hpb=6b9ce07bad5d1d0b826c620163f777d55a1f47b3;p=pspp diff --git a/src/libpspp/sparse-xarray.c b/src/libpspp/sparse-xarray.c index 0cc91c63cd..5168d87922 100644 --- a/src/libpspp/sparse-xarray.c +++ b/src/libpspp/sparse-xarray.c @@ -134,6 +134,21 @@ sparse_xarray_clone (const struct sparse_xarray *old) return new; } +static void +free_memory_rows (struct sparse_xarray *sx) +{ + if (sx->memory != NULL) + { + unsigned long int idx; + uint8_t **row; + for (row = sparse_array_first (sx->memory, &idx); row != NULL; + row = sparse_array_next (sx->memory, idx, &idx)) + free (*row); + sparse_array_destroy (sx->memory); + sx->memory = NULL; + } +} + /* Destroys sparse array of rows SX. */ void sparse_xarray_destroy (struct sparse_xarray *sx) @@ -141,15 +156,7 @@ sparse_xarray_destroy (struct sparse_xarray *sx) if (sx != NULL) { free (sx->default_row); - if (sx->memory != NULL) - { - unsigned long int idx; - uint8_t **row; - for (row = sparse_array_first (sx->memory, &idx); row != NULL; - row = sparse_array_next (sx->memory, idx, &idx)) - free (*row); - sparse_array_destroy (sx->memory); - } + free_memory_rows (sx); ext_array_destroy (sx->disk); range_set_destroy (sx->disk_rows); free (sx); @@ -208,8 +215,7 @@ dump_sparse_xarray_to_disk (struct sparse_xarray *sx) } range_set_set1 (sx->disk_rows, idx, 1); } - sparse_array_destroy (sx->memory); - sx->memory = NULL; + free_memory_rows (sx); return true; }