/*
+--------------------------------------------------------------------+
- | libmemcached - C/C++ Client Library for memcached |
+ | libmemcached-awesome - C/C++ Client Library for memcached |
+--------------------------------------------------------------------+
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted under the terms of the BSD license. |
| the terms online at: https://opensource.org/licenses/BSD-3-Clause |
+--------------------------------------------------------------------+
| Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
- | Copyright (c) 2020 Michael Wallner <mike@php.net> |
+ | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
+--------------------------------------------------------------------+
*/
# include <cctype>
# include <cerrno>
# include <climits>
+# include <ciso646>
#else
# include <stddef.h>
# include <stdio.h>
# include <time.h>
# include <errno.h>
# include <limits.h>
+# include <iso646.h>
#endif
-#ifdef HAVE_SYS_UN_H
-# include <sys/un.h>
-#endif
+#include "p9y/socket.hpp"
#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
#include <fcntl.h>
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
# include <dlfcn.h>
#endif
-#if defined(_WIN32)
-# include "libmemcached/windows.hpp"
-#endif
-
#include "libmemcached-1.0/memcached.h"
#include "libmemcached/watchpoint.h"
#include "libmemcached/is.h"
typedef struct memcached_st Memcached;
-#ifdef HAVE_POLL_H
-# include <poll.h>
-#else
-# include "libmemcached/poll.h"
-#endif
-
#ifdef __cplusplus
memcached_instance_st *memcached_instance_fetch(memcached_st *ptr, uint32_t server_key);
#endif
# include "libmemcached/io.hpp"
# include "libmemcached/udp.hpp"
# include "libmemcached/do.hpp"
-# include "libmemcached/socket.hpp"
# include "libmemcached/connect.hpp"
# include "libmemcached/allocators.hpp"
# include "libmemcached/hash.hpp"
memcached_return_t run_distribution(memcached_st *ptr);
#ifdef __cplusplus
+# include "p9y/poll.hpp"
static inline void memcached_server_response_increment(memcached_instance_st *instance) {
instance->events(POLLIN);
instance->cursor_active_++;
}
#endif
-#define memcached_server_response_decrement(A) (A)->cursor_active_--
-#define memcached_server_response_reset(A) (A)->cursor_active_ = 0
+#define memcached_server_response_decrement(A) do { \
+ WATCHPOINT_ASSERT((A)->cursor_active_ > 0); \
+ if ((A)->cursor_active_ > 0) { \
+ (A)->cursor_active_--; \
+ } \
+} while (0)
+#define memcached_server_response_reset(A) (A)->cursor_active_ = 0
#define memcached_instance_response_increment(A) (A)->cursor_active_++
-#define memcached_instance_response_decrement(A) (A)->cursor_active_--
+#define memcached_instance_response_decrement(A) do { \
+ WATCHPOINT_ASSERT((A)->cursor_active_ > 0); \
+ if ((A)->cursor_active_ > 0) { \
+ (A)->cursor_active_--; \
+ } \
+} while (0)
#define memcached_instance_response_reset(A) (A)->cursor_active_ = 0
#ifdef __cplusplus