~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/user_locks/barriers.cc

  • Committer: Monty Taylor
  • Date: 2009-05-19 21:30:11 UTC
  • mto: (1022.4.2 update-to-gcc-44)
  • mto: This revision was merged to the branch mainline in revision 1031.
  • Revision ID: mordred@inaugust.com-20090519213011-4tpejk7l2f1q7wrh
Added support for using gnutls instead of openssl for the md5 plugin. On Debian,
linking openssl against GPL software is sort of frowned on because it's one
of those murky areas. In this case, we can support gnutls by just changing a
header, so it saves us an argument with someone down the road.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 
 *
4
 
 *  Copyright (C) 2010 Brian Aker
5
 
 *
6
 
 *  This program is free software; you can redistribute it and/or modify
7
 
 *  it under the terms of the GNU General Public License as published by
8
 
 *  the Free Software Foundation; either version 2 of the License, or
9
 
 *  (at your option) any later version.
10
 
 *
11
 
 *  This program is distributed in the hope that it will be useful,
12
 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
 *  GNU General Public License for more details.
15
 
 *
16
 
 *  You should have received a copy of the GNU General Public License
17
 
 *  along with this program; if not, write to the Free Software
18
 
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 
 */
20
 
 
21
 
#include "config.h"
22
 
#include "plugin/user_locks/module.h"
23
 
 
24
 
#include <boost/thread/locks.hpp>
25
 
 
26
 
#include <string>
27
 
 
28
 
namespace user_locks {
29
 
namespace barriers {
30
 
 
31
 
bool Barriers::create(const user_locks::Key &arg, drizzled::session_id_t owner)
32
 
{
33
 
  boost::unique_lock<boost::mutex> scope(mutex);
34
 
  return barrier_map.insert(std::make_pair(arg, new Barrier(owner))).second;
35
 
}
36
 
 
37
 
bool Barriers::create(const user_locks::Key &arg, drizzled::session_id_t owner, int64_t wait_count)
38
 
{
39
 
  boost::unique_lock<boost::mutex> scope(mutex);
40
 
  return barrier_map.insert(std::make_pair(arg, new Barrier(owner, wait_count))).second;
41
 
}
42
 
 
43
 
/*
44
 
  @note return
45
 
 
46
 
  true -> release happened.
47
 
  false -> no release, we were not the owner
48
 
  indeterminate -> barrier was not found.
49
 
 
50
 
*/
51
 
return_t Barriers::release(const user_locks::Key &arg, drizzled::session_id_t owner)
52
 
{
53
 
  boost::unique_lock<boost::mutex> scope(mutex);
54
 
  Map::iterator iter= barrier_map.find(arg);
55
 
 
56
 
  // Nothing is found
57
 
  if ( iter == barrier_map.end())
58
 
    return NOT_FOUND;
59
 
 
60
 
  if (not (*iter).second->getOwner() == owner)
61
 
    return NOT_OWNED_BY;
62
 
 
63
 
  (*iter).second->signal(); // We tell anyone left to start running
64
 
  (void)barrier_map.erase(arg);
65
 
 
66
 
  return SUCCESS;
67
 
}
68
 
 
69
 
Barrier::shared_ptr Barriers::find(const user_locks::Key &arg)
70
 
{
71
 
  boost::unique_lock<boost::mutex> scope(mutex);
72
 
  Map::iterator iter= barrier_map.find(arg);
73
 
 
74
 
  if (iter != barrier_map.end())
75
 
    return (*iter).second;
76
 
 
77
 
  return Barrier::shared_ptr();
78
 
}
79
 
 
80
 
void Barriers::Copy(Map &arg)
81
 
{
82
 
  boost::unique_lock<boost::mutex> scope(mutex);
83
 
  arg= barrier_map;
84
 
}
85
 
 
86
 
} /* namespace barriers */
87
 
} /* namespace user_locks */