return -1;
}
+static void
+alloc_http_process_callback (void *s_arg)
+{
+ stream_session_t *s = (stream_session_t *) s_arg;
+ alloc_http_process (s);
+}
+
static int
http_server_rx_callback (stream_session_t * s)
{
/* send the command to a new/recycled vlib process */
s->opaque[1] = (u64) vec_dup (hsm->rx_buf);
- alloc_http_process (s);
+ /* Send an RPC request via the thread-0 input node */
+ if (vlib_get_thread_index () != 0)
+ {
+ session_fifo_event_t evt;
+ evt.rpc_args.fp = alloc_http_process_callback;
+ evt.rpc_args.arg = s;
+ evt.event_type = FIFO_EVENT_RPC;
+ unix_shared_memory_queue_add
+ (session_manager_get_vpp_event_queue (0 /* main thread */ ),
+ (u8 *) & evt, 0 /* do wait for mutex */ );
+ }
+ else
+ alloc_http_process (s);
return 0;
}
a->options[SESSION_OPTIONS_RX_FIFO_SIZE] = 8 << 10;
a->options[SESSION_OPTIONS_TX_FIFO_SIZE] = 32 << 10;
a->options[APP_OPTIONS_FLAGS] = APP_OPTIONS_FLAGS_BUILTIN_APP;
+ a->options[APP_OPTIONS_PREALLOC_FIFO_PAIRS] = 16;
a->segment_name = segment_name;
a->segment_name_length = ARRAY_LEN (segment_name);