You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/12/18 01:43:43 UTC
[lucy-commits] svn commit: r1220310 - in /incubator/lucy/trunk/clownfish:
perl/lib/Clownfish.pm src/CFCBase.c src/CFCClass.c src/CFCFunction.c
src/CFCMethod.c src/CFCSymbol.c src/CFCType.c
Author: marvin
Date: Sun Dec 18 00:43:42 2011
New Revision: 1220310
URL: http://svn.apache.org/viewvc?rev=1220310&view=rev
Log:
Fix several memory leaks in CFC.
Modified:
incubator/lucy/trunk/clownfish/perl/lib/Clownfish.pm
incubator/lucy/trunk/clownfish/src/CFCBase.c
incubator/lucy/trunk/clownfish/src/CFCClass.c
incubator/lucy/trunk/clownfish/src/CFCFunction.c
incubator/lucy/trunk/clownfish/src/CFCMethod.c
incubator/lucy/trunk/clownfish/src/CFCSymbol.c
incubator/lucy/trunk/clownfish/src/CFCType.c
Modified: incubator/lucy/trunk/clownfish/perl/lib/Clownfish.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/perl/lib/Clownfish.pm?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/perl/lib/Clownfish.pm (original)
+++ incubator/lucy/trunk/clownfish/perl/lib/Clownfish.pm Sun Dec 18 00:43:42 2011
@@ -331,6 +331,11 @@ BEGIN { XSLoader::load( 'Clownfish', '0.
}
{
+ package Clownfish::Parser;
+ BEGIN { push our @ISA, 'Clownfish::Base' }
+}
+
+{
package Clownfish::Symbol;
BEGIN { push our @ISA, 'Clownfish::Base' }
use Clownfish::Util qw( verify_args );
Modified: incubator/lucy/trunk/clownfish/src/CFCBase.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCBase.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCBase.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCBase.c Sun Dec 18 00:43:42 2011
@@ -42,7 +42,7 @@ CFCBase_incref(CFCBase *self) {
unsigned
CFCBase_decref(CFCBase *self) {
if (!self) { return 0; }
- unsigned modified_refcount = self->refcount - 1;
+ unsigned modified_refcount = --self->refcount;
if (modified_refcount == 0) {
self->meta->destroy(self);
}
Modified: incubator/lucy/trunk/clownfish/src/CFCClass.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCClass.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCClass.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCClass.c Sun Dec 18 00:43:42 2011
@@ -251,6 +251,7 @@ CFCClass_destroy(CFCClass *self) {
FREEMEM(self->full_vtable_hidden);
FREEMEM(self->full_vtable_type);
FREEMEM(self->privacy_symbol);
+ FREEMEM(self->include_h);
CFCSymbol_destroy((CFCSymbol*)self);
}
Modified: incubator/lucy/trunk/clownfish/src/CFCFunction.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFunction.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFunction.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFunction.c Sun Dec 18 00:43:42 2011
@@ -68,14 +68,15 @@ CFCFunction_init(CFCFunction *self, CFCP
int is_inline) {
exposure = exposure ? exposure : "parcel";
- CFCSymbol_init((CFCSymbol*)self, parcel, exposure, class_name,
- class_cnick, micro_sym);
CFCUTIL_NULL_CHECK(class_name);
CFCUTIL_NULL_CHECK(return_type);
CFCUTIL_NULL_CHECK(param_list);
if (!S_validate_micro_sym(micro_sym)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid micro_sym: '%s'", micro_sym);
}
+ CFCSymbol_init((CFCSymbol*)self, parcel, exposure, class_name,
+ class_cnick, micro_sym);
self->return_type = (CFCType*)CFCBase_incref((CFCBase*)return_type);
self->param_list = (CFCParamList*)CFCBase_incref((CFCBase*)param_list);
self->docucomment = (CFCDocuComment*)CFCBase_incref((CFCBase*)docucomment);
Modified: incubator/lucy/trunk/clownfish/src/CFCMethod.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCMethod.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCMethod.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCMethod.c Sun Dec 18 00:43:42 2011
@@ -95,6 +95,7 @@ CFCMethod_init(CFCMethod *self, CFCParce
int is_final, int is_abstract) {
// Validate macro_sym, derive micro_sym.
if (!S_validate_macro_sym(macro_sym)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid macro_sym: '%s'",
macro_sym ? macro_sym : "[NULL]");
}
Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Sun Dec 18 00:43:42 2011
@@ -128,12 +128,15 @@ CFCSymbol_init(CFCSymbol *self, struct C
// Validate.
CFCUTIL_NULL_CHECK(parcel);
if (!S_validate_exposure(exposure)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid exposure: '%s'", exposure ? exposure : "[NULL]");
}
if (class_name && !S_validate_class_name(class_name)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid class_name: '%s'", class_name);
}
if (!micro_sym || !S_validate_identifier(micro_sym)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid micro_sym: '%s'", micro_sym ? micro_sym : "[NULL]");
}
@@ -150,12 +153,14 @@ CFCSymbol_init(CFCSymbol *self, struct C
}
else if (class_cnick) {
// Sanity check class_cnick without class_name.
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Can't supply class_cnick without class_name");
}
else {
real_cnick = NULL;
}
if (real_cnick && !S_validate_class_cnick(real_cnick)) {
+ CFCBase_decref((CFCBase*)self);
CFCUtil_die("Invalid class_cnick: '%s'", real_cnick);
}
Modified: incubator/lucy/trunk/clownfish/src/CFCType.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCType.c?rev=1220310&r1=1220309&r2=1220310&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCType.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCType.c Sun Dec 18 00:43:42 2011
@@ -358,6 +358,7 @@ CFCType_destroy(CFCType *self) {
FREEMEM(self->specifier);
FREEMEM(self->c_string);
FREEMEM(self->array);
+ FREEMEM(self->vtable_var);
CFCBase_destroy((CFCBase*)self);
}