summaryrefslogtreecommitdiff
path: root/sql/set_var.h
diff options
context:
space:
mode:
authorkonstantin@mysql.com <>2006-04-12 18:30:54 +0400
committerkonstantin@mysql.com <>2006-04-12 18:30:54 +0400
commit75792fc0dca5d744662f87a7edc5805ce26ffe0c (patch)
tree96d659fbe401a4fa1269027a7637692d3bfc1258 /sql/set_var.h
parent7c7015909768efdb93e3dfa7e9f4392ad9bd6e2f (diff)
parenta81ea4a83027ff8965e4b6a6a3cb5c917222222f (diff)
downloadmariadb-git-75792fc0dca5d744662f87a7edc5805ce26ffe0c.tar.gz
Merge mysql.com:/opt/local/work/mysql-4.1-16365
into mysql.com:/opt/local/work/mysql-5.0-merge
Diffstat (limited to 'sql/set_var.h')
-rw-r--r--sql/set_var.h57
1 files changed, 41 insertions, 16 deletions
diff --git a/sql/set_var.h b/sql/set_var.h
index 046281ec7c5..646a578ca36 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -45,11 +45,7 @@ public:
sys_after_update_func after_update;
bool no_support_one_shot;
- sys_var(const char *name_arg)
- :name(name_arg), after_update(0)
- , no_support_one_shot(1)
- {}
- sys_var(const char *name_arg,sys_after_update_func func)
+ sys_var(const char *name_arg, sys_after_update_func func= NULL)
:name(name_arg), after_update(func)
, no_support_one_shot(1)
{}
@@ -74,15 +70,35 @@ public:
};
-class sys_var_long_ptr :public sys_var
+/*
+ A base class for all variables that require its access to
+ be guarded with a mutex.
+*/
+
+class sys_var_global: public sys_var
+{
+protected:
+ pthread_mutex_t *guard;
+public:
+ sys_var_global(const char *name_arg, sys_after_update_func after_update_arg,
+ pthread_mutex_t *guard_arg)
+ :sys_var(name_arg, after_update_arg), guard(guard_arg) {}
+};
+
+
+/*
+ A global-only ulong variable that requires its access to be
+ protected with a mutex.
+*/
+
+class sys_var_long_ptr_global: public sys_var_global
{
public:
ulong *value;
- sys_var_long_ptr(const char *name_arg, ulong *value_ptr)
- :sys_var(name_arg),value(value_ptr) {}
- sys_var_long_ptr(const char *name_arg, ulong *value_ptr,
- sys_after_update_func func)
- :sys_var(name_arg,func), value(value_ptr) {}
+ sys_var_long_ptr_global(const char *name_arg, ulong *value_ptr,
+ pthread_mutex_t *guard_arg,
+ sys_after_update_func after_update_arg= NULL)
+ :sys_var_global(name_arg, after_update_arg, guard_arg), value(value_ptr) {}
bool check(THD *thd, set_var *var);
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
@@ -92,6 +108,18 @@ public:
};
+/*
+ A global ulong variable that is protected by LOCK_global_system_variables
+*/
+
+class sys_var_long_ptr :public sys_var_long_ptr_global
+{
+public:
+ sys_var_long_ptr(const char *name_arg, ulong *value_ptr,
+ sys_after_update_func after_update_arg= NULL);
+};
+
+
class sys_var_ulonglong_ptr :public sys_var
{
public:
@@ -170,7 +198,7 @@ class sys_var_const_str :public sys_var
public:
char *value; // Pointer to const value
sys_var_const_str(const char *name_arg, const char *value_arg)
- :sys_var(name_arg), value((char*) value_arg)
+ :sys_var(name_arg),value((char*) value_arg)
{}
bool check(THD *thd, set_var *var)
{
@@ -217,10 +245,7 @@ public:
class sys_var_thd :public sys_var
{
public:
- sys_var_thd(const char *name_arg)
- :sys_var(name_arg)
- {}
- sys_var_thd(const char *name_arg, sys_after_update_func func)
+ sys_var_thd(const char *name_arg, sys_after_update_func func= NULL)
:sys_var(name_arg,func)
{}
bool check_type(enum_var_type type) { return 0; }