~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/multi_thread/multi_thread.h

  • Committer: Brian Aker
  • Date: 2010-10-08 16:11:47 UTC
  • mto: This revision was merged to the branch mainline in revision 1834.
  • Revision ID: brian@tangent.org-20101008161147-o3us2a8itszsaycx
Typdef our lock type.

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
 
12
12
  You should have received a copy of the GNU General Public License
13
13
  along with this program; if not, write to the Free Software
14
 
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
14
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
15
15
 
16
16
#ifndef PLUGIN_MULTI_THREAD_MULTI_THREAD_H
17
17
#define PLUGIN_MULTI_THREAD_MULTI_THREAD_H
29
29
{
30
30
private:
31
31
  drizzled::atomic<uint32_t> thread_count;
32
 
  pthread_attr_t attr;
33
32
 
34
33
public:
35
34
  MultiThreadScheduler(const char *name_arg): 
36
35
    Scheduler(name_arg)
37
36
  {
38
 
    struct sched_param tmp_sched_param;
39
 
 
40
 
    memset(&tmp_sched_param, 0, sizeof(struct sched_param));
41
 
 
42
 
    /* Setup attribute parameter for session threads. */
43
 
    (void) pthread_attr_init(&attr);
44
 
    (void) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
45
 
    pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
46
 
 
47
 
    tmp_sched_param.sched_priority= WAIT_PRIOR;
48
 
    (void) pthread_attr_setschedparam(&attr, &tmp_sched_param);
49
 
 
 
37
    setStackSize();
50
38
    thread_count= 0;
51
39
  }
52
40
 
54
42
  bool addSession(drizzled::Session *session);
55
43
  void killSessionNow(drizzled::Session *session);
56
44
  
57
 
  void runSession(drizzled::Session *session)
58
 
  {
59
 
    if (drizzled::internal::my_thread_init())
60
 
    {
61
 
      session->disconnect(drizzled::ER_OUT_OF_RESOURCES, true);
62
 
      statistic_increment(drizzled::aborted_connects, &LOCK_status);
63
 
      killSessionNow(session);
64
 
    }
65
 
 
66
 
    session->thread_stack= (char*) &session;
67
 
    session->run();
68
 
    killSessionNow(session);
69
 
  }
 
45
  void runSession(drizzled::Session *session);
 
46
private:
 
47
  void setStackSize();
70
48
};
71
49
 
72
50
#endif /* PLUGIN_MULTI_THREAD_MULTI_THREAD_H */