Пример #1
0
/**
 * 実行中スレッドの処理待ち
 * @param target int:時間待ち(ms), string:トリガ待ち, obj:オブジェクト待ち
 * @param timeout タイムアウト(省略時は無限に待つ)
 * @return 待ちがキャンセルされたら true
 */
SQRESULT
Thread::global_wait(HSQUIRRELVM v)
{
	Thread *th = getCurrentThread(v);
	if (!th) {
		return ERROR_NOTHREAD(v);
	}
	th->_wait(v);
	return sq_suspendvm(v);
}
Пример #2
0
/**
 * スクリプトを切り替える
 * @param func スレッドで実行するファンクション
 */
SQRESULT
Thread::global_exec(HSQUIRRELVM v)
{
	Thread *th = getCurrentThread(v);
	if (!th) {
		return ERROR_NOTHREAD(v);
	}
	if (sq_gettop(v) <= 1) {
		return ERROR_INVALIDPARAM(v);
	}
	th->_exec(v);
	return sq_suspendvm(v);
}
Пример #3
0
/**
 * コマンド実行
 * @param func スレッドで実行するファンクション
 * @return 終了コード
 */
SQRESULT
Thread::global_system(HSQUIRRELVM v)
{
	Thread *th = getCurrentThread(v);
	if (!th) {
		return ERROR_NOTHREAD(v);
	}
	if (!_fork(v)) {
		return ERROR_FORK(v);
	}
	th->_system(v);
	sq_pop(v,1);
	return sq_suspendvm(v);
}
Пример #4
0
static SQInteger program_regist(HSQUIRRELVM v, const struct reader_handle *h, struct flash_memory_driver *t)
{
	SQRESULT r = qr_argument_get(v, 2, &t->programming.address, &t->programming.length);
	if(SQ_FAILED(r)){
		return r;
	}
	t->compare = t->programming;
	t->compare.offset = t->memory.offset & (t->memory.size - 1);
	if(t->command_change == true){
		t->access->flash_config(
			h, t->c000x, t->c2aaa, t->c5555, 
			t->flash.pagesize, t->flash.retry
		);
		t->command_change = false;
	}
	
	return sq_suspendvm(v);
}
Пример #5
0
static SQInteger base_suspend(HSQUIRRELVM v)
{
	return sq_suspendvm(v);
}
static SQInteger
ngx_squ_tcp_request_recv(HSQUIRRELVM v)
{
    char               *errstr;
    size_t              size;
    SQRESULT            rc;
    ngx_buf_t          *b;
    ngx_connection_t   *c;
    ngx_squ_thread_t   *thr;
    ngx_squ_tcp_ctx_t  *ctx;
    ngx_tcp_session_t  *s;

    thr = sq_getforeignptr(v);

    ngx_log_debug0(NGX_LOG_DEBUG_CORE, thr->log, 0, "squ tcp request recv");

    ctx = thr->module_ctx;
    s = ctx->s;
    c = s->connection;

    /* TODO: the arguments in squ stack */

    rc = sq_getinteger(v, 2, (SQInteger *) &size);

    b = s->buffer;

    if (b == NULL || (size_t) (b->end - b->start) < size) {
        if (b != NULL && (size_t) (b->end - b->start) > c->pool->max) {
            ngx_pfree(c->pool, b->start);
        }

        size = ngx_max(ngx_pagesize, size);

        b = ngx_create_temp_buf(c->pool, size);
        if (b == NULL) {
            errstr = "ngx_create_temp_buf() failed";
            goto error;
        }

        s->buffer = b;
    }

    b->last = b->pos;

    c->read->handler = ngx_squ_tcp_request_read_handler;
    c->write->handler = ngx_squ_tcp_request_dummy_handler;

    ctx->rc = 0;
    ctx->not_event = 1;

    ngx_squ_tcp_request_read_handler(c->read);

    ctx->not_event = 0;

    if (ctx->rc != NGX_AGAIN) {
        return ctx->rc;
    }

    return sq_suspendvm(v);

error:

    sq_pushbool(v, SQFalse);
#if 0
    sq_pushstring(, (SQChar *) errstr, -1);
#endif

    return 1;
}