~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/scheduling.cc

  • Committer: Brian Aker
  • Date: 2009-02-10 00:14:40 UTC
  • Revision ID: brian@tangent.org-20090210001440-qjg8eofh3h93064b
Adding Multi-threaded Scheduler into the system.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
scheduling_st thread_scheduler;
27
27
static bool scheduler_inited= false; /* We must insist that only one of these plugins get loaded at a time */
28
 
static bool has_been_seen= false; /* We are still in a single thread when we see this variable, so no lock needed. */
29
28
 
30
29
static void post_kill_dummy(Session *) { return; }
31
30
static bool end_thread_dummy(Session *, bool) { return false; }
32
31
 
 
32
extern char *opt_scheduler;
 
33
 
33
34
int scheduling_initializer(st_plugin_int *plugin)
34
35
{
35
 
  if (has_been_seen == false)
 
36
  if (memcmp(plugin->plugin->name, opt_scheduler, strlen(opt_scheduler)))
 
37
    return 0;
 
38
 
 
39
  if (scheduler_inited)
36
40
  {
37
 
    memset(&thread_scheduler, 0, sizeof(scheduling_st));
38
 
    has_been_seen= true;
 
41
    fprintf(stderr, "You cannot load more then one scheduler plugin\n");
 
42
    exit(1);
39
43
  }
40
44
 
 
45
  memset(&thread_scheduler, 0, sizeof(scheduling_st));
 
46
 
41
47
  assert(plugin->plugin->init); /* Find poorly designed plugins */
42
48
  if (plugin->plugin->init)
43
49
  {
58
64
    }
59
65
  }
60
66
 
61
 
  if (thread_scheduler.is_used == true)
62
 
  {
63
 
    /* We are going to assert() on any plugin that is not well written. */
64
 
    assert(thread_scheduler.max_threads);
65
 
    assert(thread_scheduler.init_new_connection_thread);
66
 
    assert(thread_scheduler.add_connection);
67
 
    assert(thread_scheduler.post_kill_notification);
68
 
    assert(thread_scheduler.end_thread);
69
 
 
70
 
    if (scheduler_inited)
71
 
    {
72
 
      fprintf(stderr, "You cannot load more then one scheduler plugin\n");
73
 
      exit(1);
74
 
    }
75
 
 
76
 
    scheduler_inited= true;
77
 
    /* We populate so we can find which plugin was initialized later on */
78
 
    plugin->data= (void *)&thread_scheduler;
79
 
    plugin->state= PLUGIN_IS_READY;
80
 
  }
 
67
  /* We are going to assert() on any plugin that is not well written. */
 
68
  assert(thread_scheduler.max_threads);
 
69
  assert(thread_scheduler.init_new_connection_thread);
 
70
  assert(thread_scheduler.add_connection);
 
71
  assert(thread_scheduler.post_kill_notification);
 
72
  assert(thread_scheduler.end_thread);
 
73
 
 
74
  scheduler_inited= true;
 
75
  /* We populate so we can find which plugin was initialized later on */
 
76
  plugin->data= (void *)&thread_scheduler;
 
77
  plugin->state= PLUGIN_IS_READY;
81
78
 
82
79
  return 0;
83
80