mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#14549809 LINKING PROBLEM IN 5.5.28 BUILDS WITH THREADPOOL PLUGIN
The use of Thread_iterator did not work on windows (linking problems). Solution: Change the interface between the thread_pool and the server to only use simple free functions. This patch is for 5.5 only (mimicks similar solution in 5.6)
This commit is contained in:
@ -62,24 +62,8 @@ void thd_set_mysys_var(THD *thd, st_my_thread_var *mysys_var);
|
||||
ulong thd_get_net_wait_timeout(THD *thd);
|
||||
my_socket thd_get_fd(THD *thd);
|
||||
|
||||
/* Interface class for global thread list iteration */
|
||||
class Thread_iterator
|
||||
{
|
||||
public:
|
||||
Thread_iterator() : m_iterator(threads) {}
|
||||
THD* next()
|
||||
{
|
||||
THD* tmp = m_iterator++;
|
||||
return tmp;
|
||||
}
|
||||
private:
|
||||
/*
|
||||
Don't allow copying of this class.
|
||||
*/
|
||||
Thread_iterator(const Thread_iterator&);
|
||||
void operator=(const Thread_iterator&);
|
||||
I_List_iterator<THD> m_iterator;
|
||||
};
|
||||
THD *first_global_thread();
|
||||
THD *next_global_thread(THD *thd);
|
||||
|
||||
/* Print to the MySQL error log */
|
||||
void sql_print_error(const char *format, ...);
|
||||
|
@ -601,6 +601,21 @@ I_List<THD> threads;
|
||||
Rpl_filter* rpl_filter;
|
||||
Rpl_filter* binlog_filter;
|
||||
|
||||
THD *first_global_thread()
|
||||
{
|
||||
if (threads.is_empty())
|
||||
return NULL;
|
||||
return threads.head();
|
||||
}
|
||||
|
||||
THD *next_global_thread(THD *thd)
|
||||
{
|
||||
if (threads.is_last(thd))
|
||||
return NULL;
|
||||
struct ilink *next= thd->next;
|
||||
return static_cast<THD*>(next);
|
||||
}
|
||||
|
||||
struct system_variables global_system_variables;
|
||||
struct system_variables max_system_variables;
|
||||
struct system_status_var global_status_var;
|
||||
|
@ -585,6 +585,9 @@ public:
|
||||
inline void empty() { first= &last; last.prev= &first; }
|
||||
base_ilist() { empty(); }
|
||||
inline bool is_empty() { return first == &last; }
|
||||
// Returns true if p is the last "real" object in the list,
|
||||
// i.e. p->next points to the sentinel.
|
||||
inline bool is_last(ilink *p) { return p->next == NULL || p->next == &last; }
|
||||
inline void append(ilink *a)
|
||||
{
|
||||
first->prev= &a->next;
|
||||
@ -660,6 +663,7 @@ class I_List :private base_ilist
|
||||
{
|
||||
public:
|
||||
I_List() :base_ilist() {}
|
||||
inline bool is_last(T *p) { return base_ilist::is_last(p); }
|
||||
inline void empty() { base_ilist::empty(); }
|
||||
inline bool is_empty() { return base_ilist::is_empty(); }
|
||||
inline void append(T* a) { base_ilist::append(a); }
|
||||
|
Reference in New Issue
Block a user