|
|
Home » U++ Library support » U++ SQL » MySqlSession Close and Reconnect crashes Application (Reconnect crashes on newer Upp Version (CLANG) but works on older (Mingw))
MySqlSession Close and Reconnect crashes Application [message #55629] |
Wed, 25 November 2020 17:17  |
hoelblin
Messages: 4 Registered: November 2020 Location: Austria
|
Junior Member |
|
|
Hi,
I have an Application with a Connection to MySql. When the Application is Idle for
a long Period of Time the Connection is Closed with session.Close.
After that session.IsOpen returns false.
When I try to reconnect with session.Reconnect() the App Crashes with a Null Pointer dereference.
It seems like in Sql.Cancel cn->cancel is called while Member cn == NULL.
This behavior is on TheIDE Version 15512 on Windows with CLANG, on TheIDE 13664 with minGW this works as
expected without crashing.
To reproduce the Crash i have taken the SQL_MySql reference Example and make some minor changes.
#include <MySql/MySql.h>
// debian: sudo apt-get install libmysqlclient-dev
using namespace Upp;
#define SCHEMADIALECT <MySql/MySqlSchema.h>
#define MODEL <mysqlCrash/schema.sch>
#include <Sql/sch_header.h>
#include <Sql/sch_source.h>
#include <Sql/sch_schema.h>
CONSOLE_APP_MAIN
{
MySqlSession session;
// edit the connection parameters if necessary
if(session.Connect("test_user", "test", "test")) {
Cout() << "Connected\n";
SQL = session;
SqlSchema sch(MY_SQL);
All_Tables(sch);
// create the table if necessary
SqlPerformScript(sch.Upgrade());
SqlPerformScript(sch.Attributes());
SQL.ClearError();
try {
// insert some random data
SQL & Insert(TEST_TABLE)(VALUE, Uuid::Create().ToString());
// fetch some data
Sql sql;
sql * Select(ID, VALUE).From(TEST_TABLE)
.OrderBy(Descending(ID))
.Limit(5);
while(sql.Fetch())
Cout() << AsString(sql[0]) << ": " << AsString(sql[VALUE]) << "\n";
}
catch(SqlExc &ex) {
Cerr() << "ERROR: " << ex << "\n";
SetExitCode(1);
}
session.Close();
Sleep(2000);
if(session.IsOpen()) {
Cout() << "Connection closed FAILED!\n";
} else {
Cout() << "Connection closed!\n";
}
Sleep(2000);
Cout() << "Try open Connection again\n";
if(session.Reconnect()) { // CRASH !!!!!!!!!
try {
Sql sql;
sql * Select(ID, VALUE).From(TEST_TABLE)
.OrderBy(Descending(ID))
.Limit(3);
while(sql.Fetch())
Cout() << AsString(sql[0]) << ": " << AsString(sql[VALUE]) << "\n";
}
catch(SqlExc &ex) {
Cerr() << "ERROR: " << ex << "\n";
SetExitCode(1);
}
} else {
Cout() << "ERROR: " << session.GetLastError() << "\n";
}
}
else {
Cerr() <<"ERROR: Unable to connect to database\n";
SetExitCode(1);
}
}
// Moderator: PLESE USE CODE TAG FOR THE NEXT TIME!
My Question is what is the right way to do a Reconnect after Close ?


[Updated on: Wed, 25 November 2020 17:30] by Moderator Report message to a moderator
|
|
|
Goto Forum:
Current Time: Sat Apr 26 03:21:01 CEST 2025
Total time taken to generate the page: 0.00621 seconds
|
|
|