void
vcl_api_app_worker_del (vcl_worker_t * wrk)
{
+ if (wrk->api_client_handle == ~0)
+ return;
+
if (vcm->cfg.vpp_app_socket_api)
return vcl_sapi_app_worker_del (wrk);
wrk = vcl_worker_alloc ();
vcl_set_worker_index (wrk->wrk_index);
+ wrk->api_client_handle = ~0;
wrk->thread_id = pthread_self ();
wrk->current_pid = getpid ();
if (ph.data_length + SESSION_CONN_HDR_LEN > max_deq)
return 0;
- return ph.data_length;
+ /* Allow zero legth datagrams */
+ return ph.data_length ? ph.data_length : 1;
}
return svm_fifo_max_dequeue_cons (s->rx_fifo);
if ((rv = fifo_segment_attach (&vcm->segment_main, a)))
{
clib_warning ("svm_fifo_segment_attach ('%s') failed", name);
+ clib_rwlock_writer_unlock (&vcm->segment_table_lock);
return rv;
}
hash_set (vcm->segment_table, segment_handle, a->new_segment_indices[0]);
clib_rwlock_writer_unlock (&vcm->segment_table_lock);
- VDBG (0, "detached segment %u handle %u", segment_index, segment_handle);
+ VDBG (0, "detached segment %u handle %lx", segment_index, segment_handle);
}
void