Пример #1
0
void lwqq_async_event_finish(LwqqAsyncEvent* event)
{
    LwqqAsyncEvent_* internal = (LwqqAsyncEvent_*)event;
    vp_do(internal->cmd,NULL);
    LwqqAsyncEvset_* evset_ = (LwqqAsyncEvset_*)internal->host_lock;
    if(evset_ !=NULL){
        pthread_mutex_lock(&evset_->lock);
        evset_->ref_count--;
        //this store evset err count.
        if(event->result != LWQQ_EC_OK)
            evset_->parent.err_count ++;
        if(evset_->ref_count==0){
            vp_do(evset_->cmd,NULL);
            if(evset_->cond_waiting)
                pthread_cond_signal(&evset_->cond);
            else{
                pthread_mutex_unlock(&evset_->lock);
                lwqq_async_evset_free(internal->host_lock);
                s_free(event);
                return;
            }
        }
        pthread_mutex_unlock(&evset_->lock);
    }
    s_free(event);
}
Пример #2
0
void lwqq_async_event_finish(LwqqAsyncEvent* event)
{
    _LwqqAsyncEventInternal* internal = (_LwqqAsyncEventInternal*)event;
    vp_do(internal->cmd,NULL);
    _LwqqAsyncEvsetInternal* evset = (_LwqqAsyncEvsetInternal*)internal->host_lock;
    if(evset !=NULL){
        pthread_mutex_lock(&evset->lock);
        evset->ref_count--;
        //this store evset result.
        //it can only store one error number.
        if(event->result != 0)
            evset->parent.result ++;
        if(((_LwqqAsyncEvsetInternal*) internal->host_lock)->ref_count==0){
            vp_do(evset->cmd,NULL);
            if(evset->cond_waiting)
                pthread_cond_signal(&evset->cond);
            else{
                pthread_mutex_unlock(&evset->lock);
                s_free(evset);
                s_free(event);
                return;
            }
        }
        pthread_mutex_unlock(&evset->lock);
    }
    s_free(event);
}
Пример #3
0
void lwqq_async_event_finish(LwqqAsyncEvent* event)
{
    vp_do(event->cmd,NULL);
    LwqqAsyncEvset* evset = event->host_lock;
    if(evset !=NULL){
        pthread_mutex_lock(&evset->lock);
        evset->ref_count--;
        //this store evset result.
        //it can only store one error number.
        if(event->result != 0)
            evset->result = event->result;
        if(event->host_lock->ref_count==0){
            vp_do(evset->cmd,NULL);
            if(evset->cond_waiting)
                pthread_cond_signal(&evset->cond);
            else{
                pthread_mutex_unlock(&evset->lock);
                s_free(evset);
                s_free(event);
                return;
            }
        }
        pthread_mutex_unlock(&evset->lock);
    }
    s_free(event);
}
Пример #4
0
void lwqq_async_evset_wait(LwqqAsyncEvset* set)
{
    if(!set) return;
    LwqqAsyncEvset_* evset_ = (LwqqAsyncEvset_*) set;
    if(evset_->ref_count == 0) vp_do(evset_->cmd,NULL);
    else{
        evset_->cond_waiting = 1;
        pthread_cond_wait(&evset_->cond, &evset_->lock);
        vp_do(evset_->cmd,NULL);
    }
    lwqq_async_evset_free(set);
}
Пример #5
0
static int did_dispatch(void* param)
{
	LwqqCommand *d = param;
	vp_do(*d,NULL);
	s_free(d);
	return 0;
}
Пример #6
0
static void dispatch_wrap(LwqqAsyncTimerHandle timer,void* p)
{
    async_dispatch_data* data = (async_dispatch_data*)p;
    vp_do(data->cmd,NULL);
    lwqq_async_timer_stop(timer);
    lwqq_async_timer_free(timer);

    //!!! should we stop first delete later?
    s_free(data);
}
Пример #7
0
void lwqq_async_add_event_listener(LwqqAsyncEvent* event,LwqqCommand cmd)
{
    if(event == NULL){
        vp_do(cmd,NULL);
        return ;
    }else if(event->cmd.func== NULL)
        event->cmd = cmd;
    else
        vp_link(&event->cmd,&cmd);
}
Пример #8
0
void lwqq_async_dispatch_delay(LwqqCommand cmd,unsigned long timeout)
{
#ifndef WITHOUT_ASYNC
	if(timeout==0) timeout=10;
	async_dispatch_data* data = s_malloc0(sizeof(*data));
	data->cmd = cmd;
	data->timer = lwqq_async_timer_new();
	lwqq_async_timer_watch(data->timer, timeout, dispatch_wrap, data);
#else
	vp_do(cmd,NULL);
#endif
}
Пример #9
0
void lwqq_async_add_event_listener(LwqqAsyncEvent* event,LwqqCommand cmd)
{
    _LwqqAsyncEventInternal* _event = (_LwqqAsyncEventInternal*) event;
    if(event == NULL){
        //event->failcode = LWQQ_CALLBACK_FAILED;
        vp_do(cmd,NULL);
        return ;
    }else if(_event->cmd.func== NULL)
        _event->cmd = cmd;
    else
        vp_link(&_event->cmd,&cmd);
}
Пример #10
0
void lwqq_async_add_event_listener(LwqqAsyncEvent* event,LwqqCommand cmd)
{
    LwqqAsyncEvent_* event_ = (LwqqAsyncEvent_*) event;
    if(event == NULL){
        vp_do(cmd,NULL);
        return ;
    }else if(event_->cmd.func== NULL)
        event_->cmd = cmd;
    else
        vp_link(&event_->cmd,&cmd);
    if(event->failcode == LWQQ_CALLBACK_SYNCED)
        lwqq_async_event_finish(event);
}