// Do not call into something that will try to lock the OSDMap from
// here or you will have great woe and misery.
- template<typename Callback, typename...Args>
- auto with_osdmap(Callback&& cb, Args&&...args) ->
- typename std::enable_if<
- std::is_void<
- decltype(cb(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...))>::value,
- void>::type {
- shared_lock l(rwlock);
- std::forward<Callback>(cb)(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...);
- }
-
template<typename Callback, typename...Args>
auto with_osdmap(Callback&& cb, Args&&... args) ->
- typename std::enable_if<
- !std::is_void<
- decltype(cb(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...))>::value,
- decltype(cb(const_cast<const OSDMap&>(*osdmap),
- std::forward<Args>(args)...))>::type {
+ decltype(cb(const_cast<const OSDMap&>(*osdmap),
+ std::forward<Args>(args)...)) {
shared_lock l(rwlock);
return std::forward<Callback>(cb)(const_cast<const OSDMap&>(*osdmap),
std::forward<Args>(args)...);