Exemplo n.º 1
0
int pcore_stop(void *core_ptr)
{
	int rc = 0, i;
	pb_core_t *core = NULL;

	if (!core_ptr)
		return 0;

	core = (pb_core_t *)core_ptr;

	pb_log (core, PBYTE_WARN, "Stop detected");

	if (!core->active)
		return 0;

	core->active = 0;

	rc = pthread_join (core->thread_recv_send, NULL);

	for (i = 0; i < core->worker_count; i++)
	{
		rc |= pthread_join (core->thread_worker[i], NULL);
	}

	if (rc == 0)
	{
		sleep (1);
		zmq_unbind (core->sock, core->URL);
		zmq_close (core->sock);
		zmq_ctx_destroy (core->ctx);

		mqueue_close (&core->queue_in);
		mqueue_close (&core->queue_out);

		pcore_init (core);
	}

	pb_log (core, PBYTE_INFO, "Stop success [%d]", rc);

	free (core);

	return rc;
}
Exemplo n.º 2
0
/* end connection */
int wtable_endconn(WTABLE *w, int wid, int id, int *apps, int apps_num)
{
    int ret = -1, i = 0, appid = 0, mid = 0;
    WORKER *workers = NULL;

    if(w && wid > 0 && id > 0 && id < W_CONN_MAX && apps 
            && (workers = w->workers) )
    {
        for(i = 0; i < apps_num; i++)
        {
            if((appid = apps[i]) > 0)
            {
                if((mid = mtree_find(workers[wid].map,appid,id,NULL))>0) 
                    mtree_remove(workers[wid].map,appid,mid,NULL,NULL);
                //REALLOG(w->logger, "app:%d left:%d mid:%d conn:%d", appid, mtree_total(workers[wid].map,appid), mid, id);
            }
        }
        //REALLOG(w->logger, "conn[%d] apps:%d", id, mqueue_total(workers[wid].queue, workers[wid].q[id]));
        ret = mqueue_close(workers[wid].queue, workers[wid].q[id]);
        w->workers[wid].q[id] = 0;
    }
    return ret;
}