Python-API: Python 2 support.
[vpp.git] / vlib-api / vlibmemory / memory_vlib.c
index 57cb8f7..0cac49d 100644 (file)
@@ -404,6 +404,7 @@ memclnt_process (vlib_main_t * vm,
         while (1) {
             pthread_mutex_lock (&q->mutex);
             if (q->cursize == 0) {
+                vm->api_queue_nonempty = 0;
                 pthread_mutex_unlock (&q->mutex);
                 
                 if (TRACE_VLIB_MEMORY_QUEUE)
@@ -421,7 +422,7 @@ memclnt_process (vlib_main_t * vm,
             }
             
             headp = (i8 *) (q->data + sizeof(uword)*q->head);
-            memcpy (&mp, headp, sizeof(uword));
+            clib_memcpy (&mp, headp, sizeof(uword));
             
             q->head++;
             need_broadcast = (q->cursize == q->maxsize/2);
@@ -626,6 +627,7 @@ memclnt_queue_signal (int signum)
     vlib_main_t * vm = vlib_get_main();
 
     vm->queue_signal_pending = 1;
+    vm->api_queue_nonempty = 1;
 }
 
 static void 
@@ -1046,9 +1048,10 @@ VLIB_CLI_COMMAND (trace, static) = {
 clib_error_t *
 vlibmemory_init (vlib_main_t * vm)
 {
-    /* Do this early, to avoid glibc malloc fubar */
-    svm_region_init();
-    return 0;
+  api_main_t *am = &api_main;
+  /* Normally NULL, can be set by cmd line "chroot {prefix foo}" */
+  svm_region_init_chroot (am->root_path);
+  return 0;
 }
 
 VLIB_INIT_FUNCTION (vlibmemory_init);
@@ -1060,13 +1063,6 @@ void vl_set_memory_region_name (char *name)
     am->region_name = name;
 }
 
-void vl_set_memory_root_path (char *name)
-{
-    api_main_t *am = &api_main;
-
-    am->root_path = name;
-}
-
 static int range_compare (vl_api_msg_range_t * a0, vl_api_msg_range_t * a1)
 {
     int len0, len1, clen;
@@ -1141,8 +1137,8 @@ static void vl_api_rpc_call_t_handler (vl_api_rpc_call_t * mp)
       if (mp->need_barrier_sync)
         vlib_worker_thread_barrier_sync (vm);
 
-      fp = (void *)(mp->function);
-      rv = (*fp)(mp->data);
+      fp = uword_to_pointer(mp->function, int(*)(void *));
+      rv = fp(mp->data);
 
       if (mp->need_barrier_sync)
         vlib_worker_thread_barrier_release (vm);
@@ -1178,9 +1174,9 @@ void vl_api_rpc_call_main_thread (void *fp, u8 * data, u32 data_length)
 
   mp = vl_msg_api_alloc_as_if_client (sizeof (*mp) + data_length);
   memset (mp, 0, sizeof (*mp));
-  memcpy (mp->data, data, data_length);
+  clib_memcpy (mp->data, data, data_length);
   mp->_vl_msg_id = ntohs (VL_API_RPC_CALL);
-  mp->function = (u64)fp;
+  mp->function = pointer_to_uword(fp);
   mp->need_barrier_sync = 1;
   
   /* Use the "normal" control-plane mechanism for the main thread */