1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

Fix resource leak in DDLProc/DMLProc/PrimProc/WriteengineServer processes.

As part of the charset support, a call to MY_INIT() was added at the
initialization of the above processes. This call initializes the MySQL
thread environment required by the charset library. However, the
accompanying my_end() call required to terminate this thread environment
was not added at the termination of these process, hence leaking
resources. As a fix, we move the MY_INIT() calls to the Child()
functions of these services and also add the missing my_end() call.
This commit is contained in:
Gagan Goel
2023-06-22 15:53:04 +00:00
parent 5342234f15
commit 101aa079ab
4 changed files with 48 additions and 9 deletions

View File

@ -193,6 +193,9 @@ int ServiceDDLProc::Child()
ddlprocessor::DDLProcessor ddlprocessor(1, 20);
// Initialize the charset library
MY_INIT("DDLProc");
NotifyServiceStarted();
try
@ -210,6 +213,10 @@ int ServiceDDLProc::Child()
message.format(args);
logging::Logger logger(logid.fSubsysID);
logger.logMessage(LOG_TYPE_CRITICAL, message, logid);
// Free up resources allocated by MY_INIT() above.
my_end(0);
return 1;
}
catch (...)
@ -223,9 +230,16 @@ int ServiceDDLProc::Child()
message.format(args);
logging::Logger logger(logid.fSubsysID);
logger.logMessage(LOG_TYPE_CRITICAL, message, logid);
// Free up resources allocated by MY_INIT() above.
my_end(0);
return 1;
}
// Free up resources allocated by MY_INIT() above.
my_end(0);
return 0;
}
@ -237,8 +251,6 @@ int main(int argc, char** argv)
setlocale(LC_NUMERIC, "C");
// This is unset due to the way we start it
program_invocation_short_name = const_cast<char*>("DDLProc");
// Initialize the charset library
MY_INIT(argv[0]);
return ServiceDDLProc(opt).Run();
}