diff options
author | paramat <mat.gregory@virginmedia.com> | 2017-04-22 05:16:50 +0100 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2017-04-22 05:37:33 +0100 |
commit | 4c03190ce80457f19f87f9a3a6b4b03fb4f08ee1 (patch) | |
tree | 706d58a0fb74ccfdd61284469e214dfeb0c90cac | |
parent | f6d1b682d3c3fa25e11d64d52c93b92760fe2612 (diff) | |
download | minetest-4c03190ce80457f19f87f9a3a6b4b03fb4f08ee1.tar.gz minetest-4c03190ce80457f19f87f9a3a6b4b03fb4f08ee1.tar.bz2 minetest-4c03190ce80457f19f87f9a3a6b4b03fb4f08ee1.zip |
Mgflat, Mgv7: Fix noise crash on world exit.
Fix crash caused by destructor 'delete' on noise objects that are not
created due to mapgen options.
Crash was caused by commit 57eaf62c697cec91890d9cb28d10385d293d2d3f
-rw-r--r-- | src/mapgen_flat.cpp | 4 | ||||
-rw-r--r-- | src/mapgen_v7.cpp | 24 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/mapgen_flat.cpp b/src/mapgen_flat.cpp index c51b5e12e..0a44f71a5 100644 --- a/src/mapgen_flat.cpp +++ b/src/mapgen_flat.cpp @@ -73,8 +73,10 @@ MapgenFlat::MapgenFlat(int mapgenid, MapgenFlatParams *params, EmergeManager *em MapgenFlat::~MapgenFlat() { - delete noise_terrain; delete noise_filler_depth; + + if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) + delete noise_terrain; } diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index c4583578f..420d77185 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -97,16 +97,26 @@ MapgenV7::MapgenV7(int mapgenid, MapgenV7Params *params, EmergeManager *emerge) MapgenV7::~MapgenV7() { delete noise_terrain_base; + delete noise_terrain_alt; delete noise_terrain_persist; delete noise_height_select; - delete noise_terrain_alt; delete noise_filler_depth; - delete noise_mount_height; - delete noise_ridge_uwater; - delete noise_floatland_base; - delete noise_float_base_height; - delete noise_mountain; - delete noise_ridge; + + if (spflags & MGV7_MOUNTAINS) + delete noise_mount_height; + + if (spflags & MGV7_FLOATLANDS) { + delete noise_floatland_base; + delete noise_float_base_height; + } + + if (spflags & MGV7_RIDGES) { + delete noise_ridge_uwater; + delete noise_ridge; + } + + if ((spflags & MGV7_MOUNTAINS) || (spflags & MGV7_FLOATLANDS)) + delete noise_mountain; } |