Commit a91c7e71 authored by Simon Giesecke's avatar Simon Giesecke

Problem: warnings on violations of CERT ERR-58

Solution: declare functions noexcept
parent 0dce2233
...@@ -66,6 +66,14 @@ ...@@ -66,6 +66,14 @@
#include <arch/atomic.h> #include <arch/atomic.h>
#endif #endif
#if !defined ZMQ_NOEXCEPT
#if defined ZMQ_HAVE_NOEXCEPT
#define ZMQ_NOEXCEPT noexcept
#else
#define ZMQ_NOEXCEPT
#endif
#endif
namespace zmq namespace zmq
{ {
// This class represents an integer that can be incremented/decremented // This class represents an integer that can be incremented/decremented
...@@ -90,15 +98,16 @@ class atomic_counter_t ...@@ -90,15 +98,16 @@ class atomic_counter_t
public: public:
typedef uint32_t integer_t; typedef uint32_t integer_t;
inline atomic_counter_t (integer_t value_ = 0) : _value (value_) {} inline atomic_counter_t (integer_t value_ = 0) ZMQ_NOEXCEPT
: _value (value_)
inline ~atomic_counter_t () {} {
}
// Set counter _value (not thread-safe). // Set counter _value (not thread-safe).
inline void set (integer_t value_) { _value = value_; } inline void set (integer_t value_) ZMQ_NOEXCEPT { _value = value_; }
// Atomic addition. Returns the old _value. // Atomic addition. Returns the old _value.
inline integer_t add (integer_t increment_) inline integer_t add (integer_t increment_) ZMQ_NOEXCEPT
{ {
integer_t old_value; integer_t old_value;
...@@ -143,7 +152,7 @@ class atomic_counter_t ...@@ -143,7 +152,7 @@ class atomic_counter_t
} }
// Atomic subtraction. Returns false if the counter drops to zero. // Atomic subtraction. Returns false if the counter drops to zero.
inline bool sub (integer_t decrement_) inline bool sub (integer_t decrement_) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_COUNTER_WINDOWS #if defined ZMQ_ATOMIC_COUNTER_WINDOWS
LONG delta = -((LONG) decrement_); LONG delta = -((LONG) decrement_);
...@@ -198,7 +207,7 @@ class atomic_counter_t ...@@ -198,7 +207,7 @@ class atomic_counter_t
#endif #endif
} }
inline integer_t get () const { return _value; } inline integer_t get () const ZMQ_NOEXCEPT { return _value; }
private: private:
#if defined ZMQ_ATOMIC_COUNTER_CXX11 #if defined ZMQ_ATOMIC_COUNTER_CXX11
......
...@@ -64,6 +64,14 @@ ...@@ -64,6 +64,14 @@
#include <arch/atomic.h> #include <arch/atomic.h>
#endif #endif
#if !defined ZMQ_NOEXCEPT
#if defined ZMQ_HAVE_NOEXCEPT
#define ZMQ_NOEXCEPT noexcept
#else
#define ZMQ_NOEXCEPT
#endif
#endif
namespace zmq namespace zmq
{ {
#if !defined ZMQ_ATOMIC_PTR_CXX11 #if !defined ZMQ_ATOMIC_PTR_CXX11
...@@ -73,7 +81,7 @@ inline void *atomic_xchg_ptr (void **ptr_, ...@@ -73,7 +81,7 @@ inline void *atomic_xchg_ptr (void **ptr_,
, ,
mutex_t &_sync mutex_t &_sync
#endif #endif
) ) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_WINDOWS #if defined ZMQ_ATOMIC_PTR_WINDOWS
return InterlockedExchangePointer ((PVOID *) ptr_, val_); return InterlockedExchangePointer ((PVOID *) ptr_, val_);
...@@ -120,7 +128,7 @@ inline void *atomic_cas (void *volatile *ptr_, ...@@ -120,7 +128,7 @@ inline void *atomic_cas (void *volatile *ptr_,
, ,
mutex_t &_sync mutex_t &_sync
#endif #endif
) ) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_WINDOWS #if defined ZMQ_ATOMIC_PTR_WINDOWS
return InterlockedCompareExchangePointer ((volatile PVOID *) ptr_, val_, return InterlockedCompareExchangePointer ((volatile PVOID *) ptr_, val_,
...@@ -176,19 +184,16 @@ template <typename T> class atomic_ptr_t ...@@ -176,19 +184,16 @@ template <typename T> class atomic_ptr_t
{ {
public: public:
// Initialise atomic pointer // Initialise atomic pointer
inline atomic_ptr_t () { _ptr = NULL; } inline atomic_ptr_t () ZMQ_NOEXCEPT { _ptr = NULL; }
// Destroy atomic pointer
inline ~atomic_ptr_t () {}
// Set value of atomic pointer in a non-threadsafe way // Set value of atomic pointer in a non-threadsafe way
// Use this function only when you are sure that at most one // Use this function only when you are sure that at most one
// thread is accessing the pointer at the moment. // thread is accessing the pointer at the moment.
inline void set (T *ptr_) { _ptr = ptr_; } inline void set (T *ptr_) ZMQ_NOEXCEPT { _ptr = ptr_; }
// Perform atomic 'exchange pointers' operation. Pointer is set // Perform atomic 'exchange pointers' operation. Pointer is set
// to the 'val_' value. Old value is returned. // to the 'val_' value. Old value is returned.
inline T *xchg (T *val_) inline T *xchg (T *val_) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_CXX11 #if defined ZMQ_ATOMIC_PTR_CXX11
return _ptr.exchange (val_, std::memory_order_acq_rel); return _ptr.exchange (val_, std::memory_order_acq_rel);
...@@ -206,7 +211,7 @@ template <typename T> class atomic_ptr_t ...@@ -206,7 +211,7 @@ template <typename T> class atomic_ptr_t
// The pointer is compared to 'cmp' argument and if they are // The pointer is compared to 'cmp' argument and if they are
// equal, its value is set to 'val_'. Old value of the pointer // equal, its value is set to 'val_'. Old value of the pointer
// is returned. // is returned.
inline T *cas (T *cmp_, T *val_) inline T *cas (T *cmp_, T *val_) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_CXX11 #if defined ZMQ_ATOMIC_PTR_CXX11
_ptr.compare_exchange_strong (cmp_, val_, std::memory_order_acq_rel); _ptr.compare_exchange_strong (cmp_, val_, std::memory_order_acq_rel);
...@@ -240,11 +245,14 @@ template <typename T> class atomic_ptr_t ...@@ -240,11 +245,14 @@ template <typename T> class atomic_ptr_t
struct atomic_value_t struct atomic_value_t
{ {
atomic_value_t (const int value_) : _value (value_) {} atomic_value_t (const int value_) ZMQ_NOEXCEPT : _value (value_) {}
atomic_value_t (const atomic_value_t &src_) : _value (src_.load ()) {} atomic_value_t (const atomic_value_t &src_) ZMQ_NOEXCEPT
: _value (src_.load ())
{
}
void store (const int value_) void store (const int value_) ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_CXX11 #if defined ZMQ_ATOMIC_PTR_CXX11
_value.store (value_, std::memory_order_release); _value.store (value_, std::memory_order_release);
...@@ -258,7 +266,7 @@ struct atomic_value_t ...@@ -258,7 +266,7 @@ struct atomic_value_t
#endif #endif
} }
int load () const int load () const ZMQ_NOEXCEPT
{ {
#if defined ZMQ_ATOMIC_PTR_CXX11 #if defined ZMQ_ATOMIC_PTR_CXX11
return _value.load (std::memory_order_acquire); return _value.load (std::memory_order_acquire);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment