Skip to content

Commit c6eb127

Browse files
committed
- Fix allocating work space larger than 4GB
The variable connect_work_size is now ulong or ulonglong for 64bit machines. modified: storage/connect/ha_connect.cc modified: storage/connect/user_connect.cc
1 parent 99ab562 commit c6eb127

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

storage/connect/ha_connect.cc

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@
170170
#define JSONMAX 10 // JSON Default max grp size
171171

172172
extern "C" {
173-
char version[]= "Version 1.07.0001 September 30, 2020";
173+
char version[]= "Version 1.07.0002 October 03, 2020";
174174
#if defined(__WIN__)
175-
char compver[]= "Version 1.07.0001 " __DATE__ " " __TIME__;
175+
char compver[]= "Version 1.07.0002 " __DATE__ " " __TIME__;
176176
char slash= '\\';
177177
#else // !__WIN__
178178
char slash= '/';
@@ -254,8 +254,8 @@ TYPCONV GetTypeConv(void);
254254
char *GetJsonNull(void);
255255
uint GetJsonGrpSize(void);
256256
char *GetJavaWrapper(void);
257-
ulong GetWorkSize(void);
258-
void SetWorkSize(ulong);
257+
size_t GetWorkSize(void);
258+
void SetWorkSize(size_t);
259259
extern "C" const char *msglang(void);
260260

261261
static char *strz(PGLOBAL g, LEX_STRING &ls);
@@ -347,11 +347,19 @@ static MYSQL_THDVAR_ENUM(
347347
1, // def (AUTO)
348348
&usetemp_typelib); // typelib
349349

350+
#ifdef _WIN64
351+
// Size used for g->Sarea_Size
352+
static MYSQL_THDVAR_ULONGLONG(work_size,
353+
PLUGIN_VAR_RQCMDARG,
354+
"Size of the CONNECT work area.",
355+
NULL, NULL, SZWORK, SZWMIN, ULONGLONG_MAX, 1);
356+
#else
350357
// Size used for g->Sarea_Size
351358
static MYSQL_THDVAR_ULONG(work_size,
352-
PLUGIN_VAR_RQCMDARG,
353-
"Size of the CONNECT work area.",
354-
NULL, NULL, SZWORK, SZWMIN, ULONG_MAX, 1);
359+
PLUGIN_VAR_RQCMDARG,
360+
"Size of the CONNECT work area.",
361+
NULL, NULL, SZWORK, SZWMIN, ULONG_MAX, 1);
362+
#endif
355363

356364
// Size used when converting TEXT columns to VARCHAR
357365
static MYSQL_THDVAR_INT(conv_size,
@@ -461,8 +469,8 @@ char *GetJsonNull(void)
461469
{return connect_hton ? THDVAR(current_thd, json_null) : NULL;}
462470
uint GetJsonGrpSize(void)
463471
{return connect_hton ? THDVAR(current_thd, json_grp_size) : 10;}
464-
ulong GetWorkSize(void) {return THDVAR(current_thd, work_size);}
465-
void SetWorkSize(ulong)
472+
size_t GetWorkSize(void) {return (size_t)THDVAR(current_thd, work_size);}
473+
void SetWorkSize(size_t)
466474
{
467475
// Changing the session variable value seems to be impossible here
468476
// and should be done in a check function
@@ -472,7 +480,8 @@ void SetWorkSize(ulong)
472480

473481
#if defined(JAVA_SUPPORT)
474482
char *GetJavaWrapper(void)
475-
{return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";}
483+
{return connect_hton ? THDVAR(current_thd, java_wrapper)
484+
: (char*)"wrappers/JdbcInterface";}
476485
#endif // JAVA_SUPPORT
477486

478487
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
@@ -7376,7 +7385,7 @@ maria_declare_plugin(connect)
73767385
0x0107, /* version number (1.07) */
73777386
NULL, /* status variables */
73787387
connect_system_variables, /* system variables */
7379-
"1.07.0001", /* string version */
7388+
"1.07.0002", /* string version */
73807389
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
73817390
}
73827391
maria_declare_plugin_end;

storage/connect/user_connect.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ PCONNECT user_connect::to_users= NULL;
5858
/****************************************************************************/
5959
/* Get the work_size SESSION variable value . */
6060
/****************************************************************************/
61-
ulong GetWorkSize(void);
62-
void SetWorkSize(ulong);
61+
size_t GetWorkSize(void);
62+
void SetWorkSize(size_t);
6363

6464
/* -------------------------- class user_connect -------------------------- */
6565

@@ -97,7 +97,7 @@ user_connect::~user_connect()
9797
bool user_connect::user_init()
9898
{
9999
// Initialize Plug-like environment
100-
ulong worksize= GetWorkSize();
100+
size_t worksize= GetWorkSize();
101101
PACTIVITY ap= NULL;
102102
PDBUSER dup= NULL;
103103

@@ -157,16 +157,16 @@ void user_connect::SetHandler(ha_connect *hc)
157157
bool user_connect::CheckCleanup(bool force)
158158
{
159159
if (thdp->query_id > last_query_id || force) {
160-
ulong worksize = GetWorkSize();
160+
size_t worksize = GetWorkSize();
161161
size_t size = g->Sarea_Size;
162162

163163
PlugCleanup(g, true);
164164

165-
if (size != (size_t)worksize) {
165+
if (size != worksize) {
166166
FreeSarea(g);
167167

168168
// Check whether the work area could be allocated
169-
if (AllocSarea(g, (size_t)worksize)) {
169+
if (AllocSarea(g, worksize)) {
170170
AllocSarea(g, size);
171171
SetWorkSize(g->Sarea_Size); // Was too big
172172
} // endif sarea

0 commit comments

Comments
 (0)