push_error(agooUpgraded up, const char *msg, int mlen) {
    if (NULL != up && agoo_server.ctx_nil_value != up->ctx && up->on_error) {
	agooReq	req = agoo_req_create(mlen);

	if (NULL == req) {
	    return;
	}
	memcpy(req->msg, msg, mlen);
	req->msg[mlen] = '\0';
	req->up = up;
	req->method = AGOO_ON_ERROR;
	req->hook = agoo_hook_create(AGOO_NONE, NULL, up->ctx, PUSH_HOOK, &agoo_server.eval_queue);
	agoo_upgraded_ref(up);
	agoo_queue_push(&agoo_server.eval_queue, (void*)req);
    }
}
push_error(agooUpgraded up, const char *msg, int mlen) {
    if (NULL != up && agoo_server.ctx_nil_value != up->ctx && up->on_error) {
	agooReq	req = agoo_req_create(mlen);

	if (NULL == req) {
	    return;
	}
	memcpy(req->msg, msg, mlen);
	req->msg[mlen] = '\0';
	req->up = up;
	req->method = AGOO_ON_ERROR;
	req->hook = agoo_hook_create(AGOO_NONE, NULL, up->ctx, PUSH_HOOK, &agoo_server.eval_queue);
	agoo_upgraded_ref(up);
	agoo_queue_push(&agoo_server.eval_queue, (void*)req);
    }
}