From 3456073765d00e68eebf34f236a5f23eb209c7cf Mon Sep 17 00:00:00 2001 From: badlogic Date: Tue, 13 Sep 2016 11:26:24 +0200 Subject: [PATCH 1/2] [c] Closes #698, locale reset was still wrong. Thanks @FrankStain. --- spine-c/src/spine/SkeletonJson.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spine-c/src/spine/SkeletonJson.c b/spine-c/src/spine/SkeletonJson.c index 3f426ec41..fa9170609 100644 --- a/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/src/spine/SkeletonJson.c @@ -569,10 +569,11 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha CONST_CAST(char*, self->error) = 0; internal->linkedMeshCount = 0; - oldLocale = setlocale(LC_NUMERIC, NULL); + oldLocale = strdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); root = Json_create(json); setlocale(LC_NUMERIC, oldLocale); + free(oldLocale); if (!root) { _spSkeletonJson_setError(self, 0, "Invalid skeleton JSON: ", Json_getError()); return 0; From 2f5e5494758af5a86286ccb4dae75adf753f0012 Mon Sep 17 00:00:00 2001 From: halx99 Date: Tue, 13 Sep 2016 04:28:17 -0500 Subject: [PATCH 2/2] Fix memory leak of c++ objects (#697) We used C malloc/free which can't properly destruct C++ objects. --- spine-cocos2dx/src/spine/SkeletonAnimation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spine-cocos2dx/src/spine/SkeletonAnimation.cpp b/spine-cocos2dx/src/spine/SkeletonAnimation.cpp index 7c77559e1..913a27216 100644 --- a/spine-cocos2dx/src/spine/SkeletonAnimation.cpp +++ b/spine-cocos2dx/src/spine/SkeletonAnimation.cpp @@ -58,14 +58,14 @@ typedef struct _TrackEntryListeners { static _TrackEntryListeners* getListeners (spTrackEntry* entry) { if (!entry->rendererObject) { - entry->rendererObject = NEW(spine::_TrackEntryListeners); + entry->rendererObject = new spine::_TrackEntryListeners(); entry->listener = trackEntryCallback; } return (_TrackEntryListeners*)entry->rendererObject; } void disposeTrackEntry (spTrackEntry* entry) { - if (entry->rendererObject) FREE(entry->rendererObject); + if (entry->rendererObject) delete (spine::_TrackEntryListeners*)entry->rendererObject; _spTrackEntry_dispose(entry); }