static session * session_alloc(grn_ctx *ctx, grn_slap_dest *dest) { session *s; while ((s = (session *)grn_com_queue_deque(ctx, &fsessions))) { if (s->n_query < 1000000 && !s->com->closed) { return s; } //session_close(ctx, s); } return session_open(ctx, dest); }
grn_rc grn_com_event_fin(grn_ctx *ctx, grn_com_event *ev) { grn_obj *msg; while ((msg = (grn_obj *)grn_com_queue_deque(ctx, &ev->recv_old))) { grn_msg_close(ctx, msg); } if (ev->hash) { grn_hash_close(ctx, ev->hash); } #ifndef USE_SELECT if (ev->events) { GRN_FREE(ev->events); } # ifdef USE_EPOLL grn_close(ev->epfd); # endif /* USE_EPOLL */ # ifdef USE_KQUEUE grn_close(ev->kqfd); # endif /* USE_KQUEUE*/ #endif /* USE_SELECT */ return GRN_SUCCESS; }
grn_obj * grn_msg_open(grn_ctx *ctx, grn_com *com, grn_com_queue *old) { grn_msg *msg = NULL; if (old && (msg = (grn_msg *)grn_com_queue_deque(ctx, old))) { if (msg->ctx != ctx) { ERR(GRN_INVALID_ARGUMENT, "ctx unmatch"); return NULL; } GRN_BULK_REWIND(&msg->qe.obj); } else if ((msg = GRN_MALLOCN(grn_msg, 1))) { GRN_OBJ_INIT(&msg->qe.obj, GRN_MSG, 0, GRN_DB_TEXT); msg->qe.obj.header.impl_flags |= GRN_OBJ_ALLOCATED; msg->ctx = ctx; } msg->qe.next = NULL; msg->u.peer = com; msg->old = old; memset(&msg->header, 0, sizeof(grn_com_header)); return (grn_obj *)msg; }