summaryrefslogtreecommitdiffstats
path: root/src/vnet/tcp/builtin_http_server.c
diff options
context:
space:
mode:
authorDave Barach <dbarach@cisco.com>2017-05-10 13:34:04 -0400
committerDamjan Marion <dmarion.lists@gmail.com>2017-05-10 20:41:04 +0000
commite5f1d27695e2e6b9be17198e9b49e95639a15c58 (patch)
tree945a17e443245aad52590bec371748829ce66eda /src/vnet/tcp/builtin_http_server.c
parent3335693cc1afe6742e9a5e726a682dd28b0ce4d4 (diff)
Multi-thread enablement for the debug cli http server
Change-Id: Iec1f739fe24c722d0db6c10cc81b5e8333067ea1 Signed-off-by: Dave Barach <dbarach@cisco.com>
Diffstat (limited to 'src/vnet/tcp/builtin_http_server.c')
-rw-r--r--src/vnet/tcp/builtin_http_server.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/vnet/tcp/builtin_http_server.c b/src/vnet/tcp/builtin_http_server.c
index 4e61fbd1aa8..763a46e9590 100644
--- a/src/vnet/tcp/builtin_http_server.c
+++ b/src/vnet/tcp/builtin_http_server.c
@@ -385,6 +385,13 @@ builtin_redirect_connect_callback (u32 client_index, void *mp)
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)
{
@@ -414,7 +421,19 @@ 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;
}