Commit 881fd531 authored by tomas@whalegate.ndb.mysql.com's avatar tomas@whalegate.ndb.mysql.com

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0

into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
parents 31a8bfbe 33a99571
...@@ -452,6 +452,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -452,6 +452,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange);
if (parentPageRangePtr.p->currentIndexPos < 3) { if (parentPageRangePtr.p->currentIndexPos < 3) {
ljam(); ljam();
if (c_noOfFreePageRanges < tiprNoLevels)
{
ljam();
return RNIL;
}//if
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */ /* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */ /* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
......
...@@ -657,7 +657,7 @@ InitConfigFileParser::store_in_properties(Vector<struct my_option>& options, ...@@ -657,7 +657,7 @@ InitConfigFileParser::store_in_properties(Vector<struct my_option>& options,
if (options[i].var_type == GET_INT) if (options[i].var_type == GET_INT)
ctx.m_currentSection->put(options[i].name, (Uint32)value_int); ctx.m_currentSection->put(options[i].name, (Uint32)value_int);
else else
ctx.m_currentSection->put(options[i].name, value_int); ctx.m_currentSection->put64(options[i].name, value_int);
} }
} }
return true; return true;
......
...@@ -6695,7 +6695,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -6695,7 +6695,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
} }
List<NDB_SHARE> util_open_tables; uint share_list_size= 0;
NDB_SHARE **share_list= NULL;
set_timespec(abstime, 0); set_timespec(abstime, 0);
for (;;) for (;;)
{ {
...@@ -6725,7 +6726,22 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -6725,7 +6726,22 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
/* Lock mutex and fill list with pointers to all open tables */ /* Lock mutex and fill list with pointers to all open tables */
NDB_SHARE *share; NDB_SHARE *share;
pthread_mutex_lock(&ndbcluster_mutex); pthread_mutex_lock(&ndbcluster_mutex);
for (uint i= 0; i < ndbcluster_open_tables.records; i++) uint i, record_count= ndbcluster_open_tables.records;
if (share_list_size < record_count)
{
NDB_SHARE ** new_share_list= new NDB_SHARE * [record_count];
if (!new_share_list)
{
sql_print_warning("ndb util thread: malloc failure, "
"query cache not maintained properly");
pthread_mutex_unlock(&ndbcluster_mutex);
goto next; // At least do not crash
}
delete [] share_list;
share_list_size= record_count;
share_list= new_share_list;
}
for (i= 0; i < record_count; i++)
{ {
share= (NDB_SHARE *)hash_element(&ndbcluster_open_tables, i); share= (NDB_SHARE *)hash_element(&ndbcluster_open_tables, i);
share->use_count++; /* Make sure the table can't be closed */ share->use_count++; /* Make sure the table can't be closed */
...@@ -6734,14 +6750,14 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -6734,14 +6750,14 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
i, share->table_name, share->use_count)); i, share->table_name, share->use_count));
/* Store pointer to table */ /* Store pointer to table */
util_open_tables.push_back(share); share_list[i]= share;
} }
pthread_mutex_unlock(&ndbcluster_mutex); pthread_mutex_unlock(&ndbcluster_mutex);
/* Iterate through the open files list */ /* Iterate through the open files list */
List_iterator_fast<NDB_SHARE> it(util_open_tables); for (i= 0; i < record_count; i++)
while ((share= it++))
{ {
share= share_list[i];
/* Split tab- and dbname */ /* Split tab- and dbname */
char buf[FN_REFLEN]; char buf[FN_REFLEN];
char *tabname, *db; char *tabname, *db;
...@@ -6790,10 +6806,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -6790,10 +6806,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
/* Decrease the use count and possibly free share */ /* Decrease the use count and possibly free share */
free_share(share); free_share(share);
} }
next:
/* Clear the list of open tables */
util_open_tables.empty();
/* Calculate new time to wake up */ /* Calculate new time to wake up */
int secs= 0; int secs= 0;
int msecs= ndb_cache_check_time; int msecs= ndb_cache_check_time;
...@@ -6816,6 +6829,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused))) ...@@ -6816,6 +6829,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
} }
} }
if (share_list)
delete [] share_list;
thd->cleanup(); thd->cleanup();
delete thd; delete thd;
delete ndb; delete ndb;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment