null+****@clear*****
null+****@clear*****
2012年 5月 31日 (木) 16:16:22 JST
Daijiro MORI 2012-05-31 16:16:22 +0900 (Thu, 31 May 2012)
New Revision: 8478c13624d34300e284c213c7044bac5068743c
Log:
Fix terminating after an invalid command in client mode.
refs #1305
Modified files:
lib/com.c
Modified: lib/com.c (+5 -1)
===================================================================
--- lib/com.c 2012-05-31 15:53:04 +0900 (c65a53f)
+++ lib/com.c 2012-05-31 16:16:22 +0900 (318f611)
@@ -688,6 +688,7 @@ grn_rc
grn_com_send(grn_ctx *ctx, grn_com *cs,
grn_com_header *header, const char *body, uint32_t size, int flags)
{
+ grn_rc rc = GRN_SUCCESS;
size_t whole_size = sizeof(grn_com_header) + size;
ssize_t ret;
header->size = htonl(size);
@@ -721,18 +722,21 @@ grn_com_send(grn_ctx *ctx, grn_com *cs,
msg_iov[1].iov_len = size;
if ((ret = sendmsg(cs->fd, &msg, MSG_NOSIGNAL|flags)) == -1) {
SERR("sendmsg");
+ rc = ctx->rc;
}
#endif /* WIN32 */
} else {
if ((ret = send(cs->fd, (const void *)header, whole_size, MSG_NOSIGNAL|flags)) == -1) {
SERR("send");
+ rc = ctx->rc;
}
}
if (ret != whole_size) {
GRN_LOG(ctx, GRN_LOG_ERROR, "sendmsg(%d): %" GRN_FMT_LLD " < %" GRN_FMT_LLU,
cs->fd, (long long int)ret, (unsigned long long int)whole_size);
+ rc = ctx->rc;
}
- return ctx->rc;
+ return rc;
}
#define RETRY_MAX 10