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);
 }