Below is the list of changes that have just been committed into a local
5.0 repository of knielsen. When knielsen does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2151 06/05/15 18:07:18 knielsen@stripped +7 -0
Fix two Valgrind memory leak warnings.
sql/mysqld.cc
1.542 06/05/15 18:07:14 knielsen@stripped +4 -0
Add missing my_thread_end() call, seems to occasionally trigger a memory
leak (not repeatable).
mysys/my_init.c
1.45 06/05/15 18:07:14 knielsen@stripped +3 -1
Change my_end() to deallocate DBUG memory by default (can be disabled with
MY_DONT_FREE_DBUG option).
libmysql/libmysql.c
1.242 06/05/15 18:07:14 knielsen@stripped +1 -1
Do not deallocate DBUG during cleanup.
include/my_sys.h
1.179 06/05/15 18:07:13 knielsen@stripped +1 -0
Change my_end() to deallocate DBUG memory by default (can be disabled with
MY_DONT_FREE_DBUG option).
include/my_dbug.h
1.17 06/05/15 18:07:13 knielsen@stripped +3 -0
Add a facility to deallocate the debug stack, to avoid memory leak warnings
in Valgrind.
dbug/dbug.c
1.22 06/05/15 18:07:13 knielsen@stripped +68 -16
Add a facility to deallocate the debug stack, to avoid memory leak warnings
in Valgrind.
client/mysqlbinlog.cc
1.125 06/05/15 18:07:13 knielsen@stripped +4 -2
Now my_end() deallocates DBUG by default, but that fails in mysqlbinlog
because of global destructors that use DBUG.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: knielsen
# Host: rt.int.sifira.dk
# Root: /usr/local/mysql/mysql-5.0-vgfix
--- 1.21/dbug/dbug.c 2004-12-18 04:19:14 +01:00
+++ 1.22/dbug/dbug.c 2006-05-15 18:07:13 +02:00
@@ -271,6 +271,8 @@
static void CloseFile(FILE *fp);
/* Push current debug state */
static void PushState(void);
+ /* Free memory associated with debug state. */
+static void FreeState (struct state *state);
/* Test for tracing enabled */
static BOOLEAN DoTrace(CODE_STATE *state);
/* Test to see if file is writable */
@@ -630,22 +632,7 @@
stack = discard -> next_state;
_db_fp_ = stack -> out_file;
_db_pfp_ = stack -> prof_file;
- if (discard -> keywords != NULL) {
- FreeList (discard -> keywords);
- }
- if (discard -> functions != NULL) {
- FreeList (discard -> functions);
- }
- if (discard -> processes != NULL) {
- FreeList (discard -> processes);
- }
- if (discard -> p_functions != NULL) {
- FreeList (discard -> p_functions);
- }
- CloseFile (discard -> out_file);
- if (discard -> prof_file)
- CloseFile (discard -> prof_file);
- free ((char *) discard);
+ FreeState(discard);
if (!(stack->flags & DEBUG_ON))
_db_on_=0;
}
@@ -1158,6 +1145,71 @@
new_malloc -> processes = NULL;
new_malloc -> next_state = stack;
stack=new_malloc;
+}
+
+/*
+ * FUNCTION
+ *
+ * FreeState Free memory associated with a struct state.
+ *
+ * SYNOPSIS
+ *
+ * static void FreeState (state)
+ * struct state *state;
+ *
+ * DESCRIPTION
+ *
+ * Deallocates the memory allocated for various information in a
+ * state.
+ *
+ */
+static void FreeState (
+struct state *state)
+{
+ if (state -> keywords != NULL) {
+ FreeList (state -> keywords);
+ }
+ if (state -> functions != NULL) {
+ FreeList (state -> functions);
+ }
+ if (state -> processes != NULL) {
+ FreeList (state -> processes);
+ }
+ if (state -> p_functions != NULL) {
+ FreeList (state -> p_functions);
+ }
+ CloseFile (state -> out_file);
+ if (state -> prof_file)
+ CloseFile (state -> prof_file);
+ free ((char *) state);
+}
+
+
+/*
+ * FUNCTION
+ *
+ * _db_end_ End debugging, freeing state stack memory.
+ *
+ * SYNOPSIS
+ *
+ * static VOID _db_end_ ()
+ *
+ * DESCRIPTION
+ *
+ * Ends debugging, de-allocating the memory allocated to the
+ * state stack.
+ *
+ * To be called at the very end of the program.
+ *
+ */
+void _db_end_ ()
+{
+ reg1 struct state *discard;
+ while((discard= stack) != NULL) {
+ stack= discard -> next_state;
+ FreeState (discard);
+ }
+ _db_on_=0;
}
--- 1.16/include/my_dbug.h 2005-05-18 20:16:11 +02:00
+++ 1.17/include/my_dbug.h 2006-05-15 18:07:13 +02:00
@@ -40,6 +40,7 @@
extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
uint length);
extern void _db_output_(uint flag);
+extern void _db_end_(void);
extern void _db_lock_file(void);
extern void _db_unlock_file(void);
@@ -66,6 +67,7 @@
#define DBUG_IN_USE (_db_fp_ && _db_fp_ != stderr)
#define DEBUGGER_OFF _no_db_=1;_db_on_=0;
#define DEBUGGER_ON _no_db_=0
+#define DBUG_END() _db_end_ ()
#define DBUG_LOCK_FILE { _db_lock_file(); }
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
#define DBUG_OUTPUT(A) { _db_output_(A); }
@@ -90,6 +92,7 @@
#define DBUG_IN_USE 0
#define DEBUGGER_OFF
#define DEBUGGER_ON
+#define DBUG_END()
#define DBUG_LOCK_FILE
#define DBUG_UNLOCK_FILE
#define DBUG_OUTPUT(A)
--- 1.178/include/my_sys.h 2005-11-22 01:02:32 +01:00
+++ 1.179/include/my_sys.h 2006-05-15 18:07:13 +02:00
@@ -75,6 +75,7 @@
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
#define MY_GIVE_INFO 2 /* Give time info about process*/
+#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */
#define ME_HIGHBYTE 8 /* Shift for colours */
#define ME_NOCUR 1 /* Don't use curses message */
--- 1.241/libmysql/libmysql.c 2006-04-06 10:03:09 +02:00
+++ 1.242/libmysql/libmysql.c 2006-05-15 18:07:14 +02:00
@@ -178,7 +178,7 @@
/* If library called my_init(), free memory allocated by it */
if (!org_my_init_done)
{
- my_end(0);
+ my_end(MY_DONT_FREE_DBUG);
#ifndef THREAD
/* Remove TRACING, if enabled by mysql_debug() */
DBUG_POP();
--- 1.44/mysys/my_init.c 2006-02-13 15:51:11 +01:00
+++ 1.45/mysys/my_init.c 2006-05-15 18:07:14 +02:00
@@ -196,8 +196,10 @@
_CrtDumpMemoryLeaks();
#endif
}
+
+ if (!(infoflag & MY_DONT_FREE_DBUG))
+ DBUG_END(); /* Must be done before my_thread_end */
#ifdef THREAD
- DBUG_POP(); /* Must be done before my_thread_end */
my_thread_end();
my_thread_global_end();
#if defined(SAFE_MUTEX)
--- 1.124/client/mysqlbinlog.cc 2006-01-03 17:54:33 +01:00
+++ 1.125/client/mysqlbinlog.cc 2006-05-15 18:07:13 +02:00
@@ -788,7 +788,8 @@
fprintf(stderr, "\n");
va_end(args);
cleanup();
- my_end(0);
+ /* We cannot free DBUG, it is used in global destructors after exit(). */
+ my_end(MY_DONT_FREE_DBUG);
exit(1);
}
@@ -1460,7 +1461,8 @@
cleanup();
free_defaults(defaults_argv);
my_free_open_file_info();
- my_end(0);
+ /* We cannot free DBUG, it is used in global destructors after exit(). */
+ my_end(MY_DONT_FREE_DBUG);
exit(exit_value);
DBUG_RETURN(exit_value); // Keep compilers happy
}
--- 1.541/sql/mysqld.cc 2006-04-10 17:47:36 +02:00
+++ 1.542/sql/mysqld.cc 2006-05-15 18:07:14 +02:00
@@ -962,6 +962,10 @@
pthread_join(select_thread, NULL); // wait for main thread
#endif /* __NETWARE__ */
+#if defined(__NETWARE__) || (defined(USE_ONE_SIGNAL_HAND) && !defined(__WIN__) && !defined(OS2))
+ my_thread_end();
+#endif
+
pthread_exit(0); /* purecov: deadcode */
#endif /* EMBEDDED_LIBRARY */
| Thread |
|---|
| • bk commit into 5.0 tree (knielsen:1.2151) | knielsen | 15 May |