فهرست منبع

Fixed memory leaks.

NathanSweet 11 سال پیش
والد
کامیت
a040063eb7

+ 6 - 4
spine-c/include/spine/extension.h

@@ -15,15 +15,17 @@
  function.
  function.
 
 
  - Subclasses do not provide a dispose function, instead the base class' dispose function should be used, which will delegate to
  - Subclasses do not provide a dispose function, instead the base class' dispose function should be used, which will delegate to
- a dispose function.
+ a dispose function pointer.
 
 
- - Classes not designed for inheritance cannot be extended. They may use an internal subclass to hide private data and don't
+ - Classes not designed for inheritance cannot be extended because they may use an internal subclass to hide private data and don't
  expose function pointers.
  expose function pointers.
 
 
- - The public API hides implementation details such init/deinit functions. An internal API is exposed in extension.h to allow
+ - The public API hides implementation details, such as init/deinit functions. An internal API is exposed by extension.h to allow
  classes to be extended. Internal functions begin with underscore (_).
  classes to be extended. Internal functions begin with underscore (_).
 
 
- - OOP in C tends to lose type safety. Macros are provided in extension.h to give context for why a cast is being done.
+ - OOP in C tends to lose type safety. Macros for casting are provided in extension.h to give context for why a cast is being done.
+
+ - If SPINE_SHORT_NAMES is defined, the "sp" prefix for all class names is optional.
  */
  */
 
 
 #ifndef SPINE_EXTENSION_H_
 #ifndef SPINE_EXTENSION_H_

+ 1 - 1
spine-c/src/spine/Animation.c

@@ -552,7 +552,7 @@ void _spEventTimeline_dispose (spTimeline* timeline) {
 	_spTimeline_deinit(timeline);
 	_spTimeline_deinit(timeline);
 
 
 	for (i = 0; i < self->framesLength; ++i)
 	for (i = 0; i < self->framesLength; ++i)
-		FREE(self->events[i]);
+		spEvent_dispose(self->events[i]);
 	FREE(self->events);
 	FREE(self->events);
 	FREE(self->frames);
 	FREE(self->frames);
 	FREE(self);
 	FREE(self);

+ 10 - 1
spine-c/src/spine/BoundingBoxAttachment.c

@@ -34,9 +34,18 @@
 #include <spine/BoundingBoxAttachment.h>
 #include <spine/BoundingBoxAttachment.h>
 #include <spine/extension.h>
 #include <spine/extension.h>
 
 
+void _spBoundingBoxAttachment_dispose (spAttachment* attachment) {
+	spBoundingBoxAttachment* self = SUB_CAST(spBoundingBoxAttachment, attachment);
+
+	_spAttachment_deinit(attachment);
+
+	FREE(self->vertices);
+	FREE(self);
+}
+
 spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name) {
 spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name) {
 	spBoundingBoxAttachment* self = NEW(spBoundingBoxAttachment);
 	spBoundingBoxAttachment* self = NEW(spBoundingBoxAttachment);
-	_spAttachment_init(SUPER(self), name, ATTACHMENT_BOUNDING_BOX, _spAttachment_deinit);
+	_spAttachment_init(SUPER(self), name, ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose);
 	return self;
 	return self;
 }
 }
 
 

+ 9 - 1
spine-c/src/spine/RegionAttachment.c

@@ -34,11 +34,19 @@
 #include <spine/RegionAttachment.h>
 #include <spine/RegionAttachment.h>
 #include <spine/extension.h>
 #include <spine/extension.h>
 
 
+void _spRegionAttachment_dispose (spAttachment* attachment) {
+	spRegionAttachment* self = SUB_CAST(spRegionAttachment, attachment);
+
+	_spAttachment_deinit(attachment);
+
+	FREE(self);
+}
+
 spRegionAttachment* spRegionAttachment_create (const char* name) {
 spRegionAttachment* spRegionAttachment_create (const char* name) {
 	spRegionAttachment* self = NEW(spRegionAttachment);
 	spRegionAttachment* self = NEW(spRegionAttachment);
 	self->scaleX = 1;
 	self->scaleX = 1;
 	self->scaleY = 1;
 	self->scaleY = 1;
-	_spAttachment_init(SUPER(self), name, ATTACHMENT_REGION, _spAttachment_deinit);
+	_spAttachment_init(SUPER(self), name, ATTACHMENT_REGION, _spRegionAttachment_dispose);
 	return self;
 	return self;
 }
 }