From ab1f7e5871d9323242e9b3d21e2f7811f1567c43 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Sat, 1 Jun 2013 23:12:21 -0700 Subject: gras: mutex fixes for uid API calls --- lib/element_uid.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'lib/element_uid.cpp') diff --git a/lib/element_uid.cpp b/lib/element_uid.cpp index 89035b4..49daad9 100644 --- a/lib/element_uid.cpp +++ b/lib/element_uid.cpp @@ -15,32 +15,31 @@ static std::set &get_uid_set(void) return uid_set; } -static void free_uid(void *p) +static void free_uid(std::string *s) { boost::mutex::scoped_lock l(uid_mutex); - std::string *uid = reinterpret_cast(p); - get_uid_set().erase(*uid); - delete uid; + get_uid_set().erase(*s); + delete s; } -void Element::set_uid(const std::string &uid) +static std::string *alloc_uid(const std::string &uid) { boost::mutex::scoped_lock l(uid_mutex); if (get_uid_set().count(uid) > 0) { throw std::invalid_argument("Element::set_uid - uid already in use: " + uid); } - (*this)->uid.reset(new std::string(uid), &free_uid); get_uid_set().insert(uid); + return new std::string(uid); } -std::string Element::get_uid(void) const +void Element::set_uid(const std::string &uid) { - boost::mutex::scoped_lock l(uid_mutex); - return *((*this)->uid); + (*this)->uid.reset(alloc_uid(uid), &free_uid); } -std::string Element::to_string(void) const +std::string Element::get_uid(void) const { - return (*this)->repr; + boost::mutex::scoped_lock l(uid_mutex); + return *((*this)->uid); } -- cgit