Author: geechorama
Date: Tue Jul 21 14:33:17 2009
New Revision: 796320

URL: http://svn.apache.org/viewvc?rev=796320&view=rev
Log:
THRIFT-59. Fix memory leak by releasing allocated objects after assigning to 
container.

Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_cocoa_generator.cc

Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_cocoa_generator.cc
URL: 
http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_cocoa_generator.cc?rev=796320&r1=796319&r2=796320&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_cocoa_generator.cc 
(original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_cocoa_generator.cc Tue 
Jul 21 14:33:17 2009
@@ -1443,15 +1443,25 @@
                                                          string fieldName) {
   string key = tmp("_key");
   string val = tmp("_val");
-  t_field fkey(tmap->get_key_type(), key);
-  t_field fval(tmap->get_val_type(), val);
+  t_type* keyType = tmap->get_key_type();
+  t_type* valType = tmap->get_val_type();
+  t_field fkey(keyType, key);
+  t_field fval(valType, val);
 
   generate_deserialize_field(out, &fkey, key);
   generate_deserialize_field(out, &fval, val);
 
   indent(out) <<
-    "[" << fieldName << " setObject: " << containerize(fval.get_type(), val) <<
-    " forKey: " << containerize(fkey.get_type(), key) << "];" << endl;
+    "[" << fieldName << " setObject: " << containerize(valType, val) <<
+    " forKey: " << containerize(keyType, key) << "];" << endl;
+
+  if (type_can_be_null(keyType)) {
+    indent(out) << "[" << containerize(keyType, key) << " release];" << endl;
+  }
+
+  if (type_can_be_null(valType)) {
+    indent(out) << "[" << containerize(valType, val) << " release];" << endl;
+  }
 }
 
 /**
@@ -1461,12 +1471,17 @@
                                                          t_set* tset,
                                                          string fieldName) {
   string elem = tmp("_elem");
-  t_field felem(tset->get_elem_type(), elem);
+  t_type* type = tset->get_elem_type();
+  t_field felem(type, elem);
 
   generate_deserialize_field(out, &felem, elem);
 
   indent(out) <<
-    "[" << fieldName << " addObject: " << containerize(felem.get_type(), elem) 
<< "];" << endl;
+    "[" << fieldName << " addObject: " << containerize(type, elem) << "];" << 
endl;
+
+  if (type_can_be_null(type)) {
+    indent(out) << "[" << containerize(type, elem) << " release];" << endl;
+  }
 }
 
 /**
@@ -1476,12 +1491,17 @@
                                                           t_list* tlist,
                                                           string fieldName) {
   string elem = tmp("_elem");
-  t_field felem(tlist->get_elem_type(), elem);
+  t_type* type = tlist->get_elem_type();
+  t_field felem(type, elem);
 
   generate_deserialize_field(out, &felem, elem);
 
   indent(out) <<
-    "[" << fieldName << " addObject: " << containerize(felem.get_type(), elem) 
<< "];" << endl;
+    "[" << fieldName << " addObject: " << containerize(type, elem) << "];" << 
endl;
+
+  if (type_can_be_null(type)) {
+    indent(out) << "[" << containerize(type, elem) << " release];" << endl;
+  }
 }
 
 


Reply via email to