#include "ms_thread.h"
#include "ms_atomic.h"
+#ifdef linux
+/* /usr/include/netinet/in.h defines macros from ntohs() to _bswap_nn to
+ * optimize the conversion functions, but the prototypes generate warnings
+ * from gcc. The conversion methods isn't the bottleneck for my app, so
+ * just remove the warnings by undef'ing the optimization ..
+ */
+#undef ntohs
+#undef ntohl
+#undef htons
+#undef htonl
+#endif
+
/* for network write */
#define TRANSMIT_COMPLETE 0
#define TRANSMIT_INCOMPLETE 1
close(c->sfd);
c->tcpsfd[c->cur_idx]= 0;
- if (atomic_add_32_nv((volatile uint32_t *)&ms_setting.servers[srv_idx].disconn_cnt, 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].disconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].disconn_time, NULL);
fprintf(stderr, "Server %s:%d disconnect\n",
ms_setting.udp, &c->sfd) == 0)
{
c->tcpsfd[c->cur_idx]= c->sfd;
- if (atomic_add_32_nv((volatile uint32_t *)(&ms_setting.servers[srv_idx].reconn_cnt), 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].reconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].reconn_time, NULL);
int reconn_time=
c->tcpsfd[i]= ret_sfd;
c->alive_sfds++;
- if (atomic_add_32_nv((volatile uint32_t *)(&ms_setting.servers[srv_idx].reconn_cnt), 1)
- % srv_conn_cnt == 0)
+ if (atomic_add_32_nv(&ms_setting.servers[srv_idx].reconn_cnt, 1)
+ % (uint32_t)srv_conn_cnt == 0)
{
gettimeofday(&ms_setting.servers[srv_idx].reconn_time, NULL);
int reconn_time=
{
if ((c->packets > 0) && (c->packets < MAX_UDP_PACKET))
{
- memset(c->udppkt, 0, sizeof(ms_udppkt_t) * (uint64_t)c->packets);
+ memset(c->udppkt, 0, sizeof(ms_udppkt_t) * (size_t)c->packets);
}
c->packets= 0;
c->binary_header= *rsp;
c->binary_header.response.extlen= rsp->response.extlen;
- c->binary_header.response.keylen= ntohl(rsp->response.keylen);
+ c->binary_header.response.keylen= ntohs(rsp->response.keylen);
c->binary_header.response.bodylen= ntohl(rsp->response.bodylen);
- c->binary_header.response.status= ntohl(rsp->response.status);
+ c->binary_header.response.status= ntohs(rsp->response.status);
if (c->binary_header.response.magic != PROTOCOL_BINARY_RES)
{
if (res > 0)
{
- atomic_add_64(&ms_stats.bytes_read, res);
+ atomic_add_size(&ms_stats.bytes_read, res);
c->rudpbytes+= res;
rbytes+= res;
if (res == avail)
if (copybytes == -1)
{
- atomic_add_64(&ms_stats.pkt_disorder, 1);
+ atomic_add_size(&ms_stats.pkt_disorder, 1);
}
return copybytes;
{
if (! c->udp)
{
- atomic_add_64(&ms_stats.bytes_read, res);
+ atomic_add_size(&ms_stats.bytes_read, res);
}
gotdata= 1;
c->rbytes+= res;
if (curr_time.tv_sec - c->curr_task.item->client_time
> c->curr_task.item->exp_time + EXPIRE_TIME_ERROR)
{
- atomic_add_64(&ms_stats.exp_get, 1);
+ atomic_add_size(&ms_stats.exp_get, 1);
if (ms_setting.verbose)
{
if ((c->curr_task.item->value_size != vlen)
|| (memcmp(orignval, value, (size_t)vlen) != 0))
{
- atomic_add_64(&ms_stats.vef_failed, 1);
+ atomic_add_size(&ms_stats.vef_failed, 1);
if (ms_setting.verbose)
{
if (c->msgsize == c->msgused)
{
msg=
- realloc(c->msglist, (uint64_t)c->msgsize * 2 * sizeof(struct msghdr));
+ realloc(c->msglist, (size_t)c->msgsize * 2 * sizeof(struct msghdr));
if (! msg)
return -1;
{
int i, iovnum;
struct iovec *new_iov= (struct iovec *)realloc(c->iov,
- ((uint64_t)c->iovsize
+ ((size_t)c->iovsize
* 2)
* sizeof(struct iovec));
if (! new_iov)
res= sendmsg(c->sfd, m, 0);
if (res > 0)
{
- atomic_add_64(&ms_stats.bytes_written, res);
+ atomic_add_size(&ms_stats.bytes_written, res);
/* We've written some of the data. Remove the completed
* iovec entries from the list of pending writes. */
if (res > 0)
{
m->msg_iov->iov_base= (void *)((unsigned char *)m->msg_iov->iov_base + res);
- m->msg_iov->iov_len-= (uint64_t)res;
+ m->msg_iov->iov_len-= (size_t)res;
}
return TRANSMIT_INCOMPLETE;
}
}
}
- atomic_add_64(&ms_stats.obj_bytes,
- item->key_size + item->value_size);
- atomic_add_64(&ms_stats.cmd_set, 1);
+ atomic_add_size(&ms_stats.obj_bytes,
+ item->key_size + item->value_size);
+ atomic_add_size(&ms_stats.cmd_set, 1);
return 0;
} /* ms_mcd_set */
}
}
- atomic_add_64(&ms_stats.cmd_get, 1);
+ atomic_add_size(&ms_stats.cmd_get, 1);
return 0;
} /* ms_mcd_get */
for (int i= 0; i < c->mlget_task.mlget_num; i++)
{
item= c->mlget_task.mlget_item[i].item;
- atomic_add_64(&ms_stats.cmd_get, 1);
+ atomic_add_size(&ms_stats.cmd_get, 1);
}
return 0;
header->request.magic= (uint8_t)PROTOCOL_BINARY_REQ;
header->request.opcode= (uint8_t)opcode;
- header->request.keylen= htonl(key_len);
+ header->request.keylen= htons(key_len);
header->request.extlen= (uint8_t)hdr_len;
header->request.datatype= (uint8_t)PROTOCOL_BINARY_RAW_BYTES;