static void grn_ctx_ql_init(grn_ctx *ctx, int flags) { if (!ctx->impl) { grn_ctx_impl_init(ctx); if (ERRP(ctx, GRN_ERROR)) { return; } } if (flags & GRN_CTX_BATCH_MODE) { ctx->impl->batchmode = 1; } if ((ctx->impl->objects = grn_array_create(ctx, NULL, sizeof(grn_cell), GRN_ARRAY_TINY))) { if ((ctx->impl->symbols = grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE, sizeof(grn_cell), GRN_OBJ_KEY_VAR_SIZE|GRN_HASH_TINY))) { if (!ERRP(ctx, GRN_ERROR)) { grn_ql_init_globals(ctx); if (!ERRP(ctx, GRN_ERROR)) { return; } } grn_hash_close(ctx, ctx->impl->symbols); ctx->impl->symbols = NULL; } else { MERR("ctx->impl->symbols init failed"); } grn_array_close(ctx, ctx->impl->objects); ctx->impl->objects = NULL; } else { MERR("ctx->impl->objects init failed"); } }
grn_rc grn_ctx_init(grn_ctx *ctx, int flags) { grn_rc rc; rc = grn_ctx_init_internal(ctx, flags); if (rc == GRN_SUCCESS) { grn_ctx_impl_init(ctx); rc = ctx->rc; if (rc != GRN_SUCCESS) { grn_ctx_fin(ctx); if (flags & GRN_CTX_ALLOCATED) { CRITICAL_SECTION_ENTER(grn_glock); ctx->next->prev = ctx->prev; ctx->prev->next = ctx->next; CRITICAL_SECTION_LEAVE(grn_glock); } } } return rc; }