~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/internal/my_thr_init.cc

  • Committer: Monty Taylor
  • Date: 2010-12-26 00:22:34 UTC
  • mto: This revision was merged to the branch mainline in revision 2038.
  • Revision ID: mordred@inaugust.com-20101226002234-2sb62sm2gs0iftuy
Fixing some of the innodb c++ casting issues.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
  thread variables.
19
19
*/
20
20
 
21
 
#include <config.h>
 
21
#include "config.h"
22
22
 
23
 
#include <drizzled/internal/my_sys.h>
24
 
#include <drizzled/internal/thread_var.h>
25
 
#include <drizzled/internal/m_string.h>
 
23
#include "drizzled/internal/my_sys.h"
 
24
#include "drizzled/internal/thread_var.h"
 
25
#include "drizzled/internal/m_string.h"
26
26
 
27
27
#include <cstdio>
28
28
#include <signal.h>
42
42
#include <boost/thread/mutex.hpp>
43
43
#include <boost/thread/tss.hpp>
44
44
 
45
 
namespace drizzled {
46
 
namespace internal {
 
45
namespace drizzled
 
46
{
 
47
namespace internal
 
48
{
47
49
 
48
50
boost::thread_specific_ptr<st_my_thread_var> THR_KEY_mysys;
49
51
boost::mutex THR_LOCK_threads;
50
52
 
 
53
/*
 
54
  initialize thread environment
 
55
 
 
56
  SYNOPSIS
 
57
    my_thread_global_init()
 
58
 
 
59
  RETURN
 
60
    0  ok
 
61
    1  error (Couldn't create THR_KEY_mysys)
 
62
*/
 
63
 
 
64
bool my_thread_global_init(void)
 
65
{
 
66
  if (my_thread_init())
 
67
  {
 
68
    my_thread_global_end();                     /* Clean up */
 
69
    return 1;
 
70
  }
 
71
  return 0;
 
72
}
 
73
 
 
74
 
 
75
void my_thread_global_end(void)
 
76
{
 
77
}
 
78
 
51
79
static uint64_t thread_id= 0;
52
80
 
53
81
/*
61
89
    1  Fatal error; mysys/dbug functions can't be used
62
90
*/
63
91
 
64
 
void my_thread_init()
 
92
bool my_thread_init(void)
65
93
{
66
 
  // We should never see my_thread_init() called twice
 
94
  // We should mever see my_thread_init()  called twice
67
95
  if (THR_KEY_mysys.get())
 
96
    return 0;
 
97
 
 
98
  st_my_thread_var *tmp= new st_my_thread_var;
 
99
  if (tmp == NULL)
68
100
  {
69
 
    abort();
 
101
    return true;
70
102
  }
 
103
  THR_KEY_mysys.reset(tmp);
 
104
 
71
105
  boost::mutex::scoped_lock scopedLock(THR_LOCK_threads);
72
 
  THR_KEY_mysys.reset(new st_my_thread_var(++thread_id));
73
 
}
74
 
 
75
 
st_my_thread_var* my_thread_var()
 
106
  tmp->id= ++thread_id;
 
107
 
 
108
  return false;
 
109
}
 
110
 
 
111
 
 
112
/*
 
113
  Deallocate memory used by the thread for book-keeping
 
114
 
 
115
  SYNOPSIS
 
116
    my_thread_end()
 
117
 
 
118
  NOTE
 
119
    This may be called multiple times for a thread.
 
120
    This happens for example when one calls 'mysql_server_init()'
 
121
    mysql_server_end() and then ends with a mysql_end().
 
122
*/
 
123
 
 
124
void my_thread_end(void)
 
125
{
 
126
}
 
127
 
 
128
struct st_my_thread_var *_my_thread_var(void)
76
129
{
77
130
  return THR_KEY_mysys.get();
78
131
}