コード例 #1
0
ファイル: gop.c プロジェクト: hellermf/lstore-release
void _gop_dummy_submit_op(void *arg, op_generic_t *op)
{
    int dolock = 0;

    log_printf(15, "gid=%d\n", gop_id(op));
//  if (op->base.cb != NULL) {  //** gop is on a q
    apr_thread_mutex_lock(gd_lock);
    push(gd_stack, op);
    apr_thread_cond_signal(gd_cond);
    apr_thread_mutex_unlock(gd_lock);
    return;
//  }

//*-------* This isn't executed below -----------

    if (apr_thread_mutex_trylock(op->base.ctl->lock) != APR_SUCCESS) dolock = 1;
    unlock_gop(op);

//log_printf(15, "dolock=%d gid=%d err=%d APR_SUCCESS=%d\n", dolock, gop_id(op), err, APR_SUCCESS);
    op->base.started_execution = 1;
    gop_mark_completed(op, op->base.status);

    if (dolock == 1) {
        lock_gop(op);
    } //** lock_gop is a macro so need the {}
    return;
}
コード例 #2
0
ファイル: hportal.c プロジェクト: PerilousApricot/lstore
void _hp_fail_tasks(host_portal_t *hp, op_status_t err_code)
{
    op_generic_t *hsop;

    hp->workload = 0;

    //** Use the _get_hportal_op() To make sure we handle any coalescing
    while ((hsop = _get_hportal_op(hp)) != NULL) {
        hportal_unlock(hp);
        gop_mark_completed(hsop, err_code);
        hportal_lock(hp);
    }

//  while ((hsop = (op_generic_t *)tbx_stack_pop(hp->que)) != NULL) {
//      hportal_unlock(hp);
//      gop_mark_completed(hsop, err_code);
//      hportal_lock(hp);
//  }
}
コード例 #3
0
ファイル: gop.c プロジェクト: hellermf/lstore-release
void *gd_thread_func(apr_thread_t *th, void *data)
{
    op_generic_t *gop;

    apr_thread_mutex_lock(gd_lock);
    while (gd_shutdown == 0) {
        //** Execute everything on the stack
        while ((gop = (op_generic_t *)pop(gd_stack)) != NULL) {
            log_printf(15, "DUMMY gid=%d status=%d\n", gop_id(gop), gop->base.status.op_status);
            apr_thread_mutex_unlock(gd_lock);
            gop_mark_completed(gop, gop->base.status);
            apr_thread_mutex_lock(gd_lock);
        }

        //** Wait for more work
        apr_thread_cond_wait(gd_cond, gd_lock);
    }
    apr_thread_mutex_unlock(gd_lock);

    return(NULL);
}