#At file:///C:/bzr/mysql-6.0-falcon-team/
2764 Vladislav Vaintroub 2008-08-01
Bug#38519 - errors in embedded tests
2 issues addressed here:
1) Memory manager structures were not always initialized in MemMgr::allocD
ebug()
2) There is a crash in exit() on destructor of static SyncObject syncDatab
aseList.
SyncObject::name points to invalid memory. No idea how that happens, either
memory corruption or memoryManager destructor has already run.
Fixed/worked around by making SyncObject::name const char* and thus avoiding
any calls to MemMgr. SyncObject::name is or should be a constant string anyway.
modified:
storage/falcon/MemMgr.cpp
storage/falcon/SyncObject.cpp
storage/falcon/SyncObject.h
storage/falcon/Table.cpp
=== modified file 'storage/falcon/MemMgr.cpp'
--- a/storage/falcon/MemMgr.cpp 2008-06-19 15:09:45 +0000
+++ b/storage/falcon/MemMgr.cpp 2008-08-01 18:23:18 +0000
@@ -543,6 +543,7 @@ void* MemMgr::allocateDebug(int size, co
{
length = ROUNDUP(size, defaultRounding) + OFFSET(MemBlock*, body) + sizeof(long);
memory = (MemBlock*) allocRaw(length);
+ memory->length = length;
memory->pool = NULL;
}
=== modified file 'storage/falcon/SyncObject.cpp'
--- a/storage/falcon/SyncObject.cpp 2008-07-24 08:45:03 +0000
+++ b/storage/falcon/SyncObject.cpp 2008-08-01 18:23:18 +0000
@@ -133,9 +133,6 @@ SyncObject::~SyncObject()
#ifdef TRACE_SYNC_OBJECTS
if (objectId < MAX_SYNC_OBJECTS)
syncObjects[objectId] = NULL;
-
- if (name)
- delete [] name;
#endif
}
@@ -1060,19 +1057,7 @@ void SyncObject::getSyncInfo(InfoTable*
void SyncObject::setName(const char* string)
{
#ifdef TRACE_SYNC_OBJECTS
- if (name)
- {
- delete [] name;
- name = NULL;
- }
-
- if (string)
- {
- name = new char[strlen(string)+1];
- strcpy(name, string);
- }
-
- //name = string;
+ name = string;
#endif
}
=== modified file 'storage/falcon/SyncObject.h'
--- a/storage/falcon/SyncObject.h 2008-07-24 08:45:03 +0000
+++ b/storage/falcon/SyncObject.h 2008-08-01 18:23:18 +0000
@@ -109,7 +109,7 @@ protected:
int waitCount;
int queueLength;
const char* location;
- char* name;
+ const char* name;
#endif
};
=== modified file 'storage/falcon/Table.cpp'
--- a/storage/falcon/Table.cpp 2008-07-24 08:45:03 +0000
+++ b/storage/falcon/Table.cpp 2008-08-01 18:23:18 +0000
@@ -814,11 +814,11 @@ void Table::init(int id, const char *sch
primaryKey = NULL;
formats = NEW Format* [FORMAT_HASH_SIZE];
+ static char name[SYNC_VERSIONS_SIZE][64];
for (int n = 0; n < SYNC_VERSIONS_SIZE; n++)
{
- char name[64];
- sprintf(name, "syncPriorVersions[%02d]", n);
- syncPriorVersions[n].setName(name);
+ sprintf(name[n], "syncPriorVersions[%02d]", n);
+ syncPriorVersions[n].setName(name[n]);
}
triggers = NULL;
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon branch (vvaintroub:2764) Bug#38519 | Vladislav Vaintroub | 1 Aug |