summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-03-25 08:45:13 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-03-25 08:45:13 +0000
commitc15f7d465feae4a66e9f4ee68b2d0fc6067dbeb0 (patch)
treefe304e1e1db57374da79a05016053e5fb7cb810b /apps
parentd94fe6ed5733709660c13e11287fb89ff1236e82 (diff)
downloadATCD-c15f7d465feae4a66e9f4ee68b2d0fc6067dbeb0.tar.gz
Fix a big memory leak when failing to cache large objects.
Diffstat (limited to 'apps')
-rw-r--r--apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp b/apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp
index 47ee7bf278b..fb7c9bb55e9 100644
--- a/apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp
+++ b/apps/JAWS/PROTOTYPE/JAWS/Cache_Manager_T.cpp
@@ -5,8 +5,8 @@
#include "JAWS/Cache_Manager_T.h"
#include "JAWS/Cache_Hash_T.h"
-#include "JAWS/Cache_Heap_T.h"
-#include "JAWS/Cache_List_T.h"
+
+class Cache_Manager;
#include <iostream.h>
@@ -53,9 +53,9 @@ ACE_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
this->factory_ = Object_Factory::instance ();
ACE_NEW_MALLOC (this->hash_,
- (Cache_Hash *)
- this->allocator_->malloc (sizeof (Cache_Hash)),
- Cache_Hash (alloc, hashsize));
+ (ACE_CACHE_HASH *)
+ this->allocator_->malloc (sizeof (ACE_CACHE_HASH)),
+ ACE_CACHE_HASH (alloc, hashsize));
if (this->hash_ == 0)
{
@@ -206,7 +206,10 @@ ACE_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
result = this->MAKE (data, size, obj);
if (result == -1)
{
- cerr << "MAKE failed. Bummer!" << endl;
+ if (obj)
+ this->DROP_i (obj);
+ else
+ cerr << "MAKE failed. Bummer!" << endl;
return -1;
}
@@ -360,6 +363,7 @@ ACE_Cache_Manager<KEY,FACTORY,HASH_FUNC,EQ_FUNC>
// The above is a little tricky to implement. Think about it
// some more.
cerr << "*** " << size << " is too large to cache" << endl;
+ obj = this->factory_->create (data, size);
return -1;
#endif /* 0 */