Index: trunk/kernel/kern/rpc.c
===================================================================
--- trunk/kernel/kern/rpc.c	(revision 415)
+++ trunk/kernel/kern/rpc.c	(revision 416)
@@ -94,6 +94,5 @@
 ///////////////////////////////////////
 void rpc_send( cxy_t        server_cxy, 
-               rpc_desc_t * rpc,
-               bool_t       block )
+               rpc_desc_t * rpc )
 {
     error_t    error;
@@ -106,7 +105,4 @@
     rpc->lid       = core->lid;
 
-printk("\n   @@@ enter %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
-__FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);
- 
     // build an extended pointer on the RPC descriptor
 	xptr_t   desc_xp = XPTR( local_cxy , rpc );
@@ -137,8 +133,8 @@
 	dev_pic_send_ipi( server_cxy , core->lid );
 
-    // wait RPC completion if blocking
+    // wait RPC completion before returning if blocking RPC
     // - busy waiting policy during kernel_init, or if threads cannot yield
     // - block and deschedule in all other cases
-    if ( block )
+    if ( rpc->blocking )
     {
         if( (this->type == THREAD_IDLE) || (thread_can_yield() == false) ) // busy waiting
@@ -178,8 +174,4 @@
         dev_pic_ack_ipi();
     }
-    
-printk("\n   @@@ exit %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
-__FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);
- 
 }  // end rpc_send()
 
@@ -244,14 +236,10 @@
 	            hal_atomic_add( &LOCAL_CLUSTER->rpc_threads , 1 );
 
-grpc_dmsg("\n[DBG] %s : core [%x,%d] creates a new RPC thread %x / cycle %d\n", 
-__FUNCTION__ , local_cxy , core->lid , thread->trdid , hal_time_stamp() );
+grpc_dmsg("\n[DBG] %s : core [%x,%d] creates a new RPC thread %x / trdid %x / cycle %d\n", 
+__FUNCTION__ , local_cxy , core->lid , thread , thread->trdid , hal_time_stamp() );
 
             }
         }
     }
-
-//@@@
-sched_display( 0 );
-//@@@
 
 grpc_dmsg("\n[DBG] %s : core[%x,%d] / interrupted thread %s deschedules / cycle %d\n", 
@@ -279,7 +267,7 @@
     rpc_desc_t * desc_ptr;    // RPC request local pointer 
     uint32_t     index;       // RPC request index 
-    uint32_t     responses;   // number of responses received by client 
     thread_t   * thread_ptr;  // local pointer on client thread
     lid_t        core_lid;    // local index of client core
+    bool_t       blocking;    // blocking RPC when true
  
     // makes RPC thread not preemptable
@@ -319,10 +307,8 @@
                     desc_ptr = (rpc_desc_t *)GET_PTR( desc_xp );
 
-                    // get rpc index from RPC descriptor
-	                index = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->index ) );
-
-printk("\n   @@@ in %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
-__FUNCTION__ , desc_cxy , desc_ptr , index , &desc_ptr->index );
- 
+                    // get RPC <index> & <blocking> fields from RPC descriptor
+	                index    = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->index ) );
+                    blocking = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->blocking ) );
+
 grpc_dmsg("\n[DBG] %s : core[%x,%d] / RPC thread %x / starts rpc %d / cycle %d\n",
 __FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , (uint32_t)hal_get_cycles() );
@@ -334,14 +320,14 @@
 __FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , hal_time_stamp() );
 
-                    // increment handled RPC counter
+                    // increment handled RPCs counter
   	                count++;
 
-                    // decrement response counter in RPC descriptor
-                    responses = hal_remote_atomic_add(XPTR( desc_cxy, &desc_ptr->response ), -1);
-
-                    // unblock client thread  and send IPI to client core if last response
-                    if( responses == 1 )
-                    { 
-                        // get pointer on client thread and unblock it
+                    // decrement response counter in RPC descriptor if blocking
+                    if( blocking )
+                    {
+                        // decrement responses counter in RPC descriptor
+                        hal_remote_atomic_add(XPTR( desc_cxy, &desc_ptr->response ), -1);
+
+                        // unblock client thread
                         thread_ptr = (thread_t *)hal_remote_lpt(XPTR(desc_cxy,&desc_ptr->thread));
                         thread_unblock( XPTR(desc_cxy,thread_ptr) , THREAD_BLOCKED_RPC );
@@ -363,5 +349,6 @@
             // release rpc_fifo ownership if not lost
             if( rpc_fifo->owner == this->trdid ) rpc_fifo->owner = 0;
-        }
+
+        }  // end if RPC fifo
 
         // sucide if too many RPC threads in cluster
@@ -412,4 +399,5 @@
     rpc.index    = RPC_PMEM_GET_PAGES;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -417,5 +405,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc  , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -470,4 +458,5 @@
     rpc.index    = RPC_PMEM_RELEASE_PAGES;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -475,5 +464,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc  , true );
+    rpc_send( cxy , &rpc );
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -526,4 +515,5 @@
     rpc.index    = RPC_PROCESS_MAKE_EXEC;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor  
@@ -531,5 +521,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc  , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -597,4 +587,5 @@
     rpc.index    = RPC_PROCESS_MAKE_FORK;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor  
@@ -603,5 +594,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc  , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -658,5 +649,5 @@
 ///////////////////////////////////////////////////
 void rpc_process_make_exit_client( cxy_t       cxy,
-                                   process_t * process,
+                                   pid_t       pid,
                                    uint32_t    status ) 
 {
@@ -671,11 +662,12 @@
     rpc.index    = RPC_PROCESS_MAKE_EXIT;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor  
-    rpc.args[0] = (uint64_t)(intptr_t)process;
+    rpc.args[0] = (uint64_t)pid;
     rpc.args[1] = (uint64_t)status;
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -691,6 +683,6 @@
 CURRENT_THREAD->core->lid , hal_time_stamp() );
 
-    process_t * process;
-    uint32_t    status;  
+    pid_t     pid;
+    uint32_t  status;  
 
     // get client cluster identifier and pointer on RPC descriptor
@@ -699,9 +691,9 @@
 
     // get arguments from RPC descriptor
-    process = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );
-    status  = (uint32_t)             hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );
+    pid    = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );
+    status = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );
 
     // call local kernel function
-    process_make_exit( process , status ); 
+    process_make_exit( pid , status ); 
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -716,5 +708,5 @@
 ///////////////////////////////////////////////////
 void rpc_process_make_kill_client( cxy_t       cxy,
-                                   process_t * process,
+                                   pid_t       pid,
                                    uint32_t    sig_id ) 
 {
@@ -729,11 +721,12 @@
     rpc.index    = RPC_PROCESS_MAKE_KILL;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor  
-    rpc.args[0] = (uint64_t)(intptr_t)process;
+    rpc.args[0] = (uint64_t)pid;
     rpc.args[1] = (uint64_t)sig_id;
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -749,5 +742,5 @@
 CURRENT_THREAD->core->lid , hal_time_stamp() );
 
-    process_t * process;
+    pid_t       pid;
     uint32_t    sig_id;
 
@@ -757,9 +750,9 @@
 
     // get arguments from RPC descriptor
-    process = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );
-    sig_id  = (uint32_t)             hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );
+    pid    = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );
+    sig_id = (uint32_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );
 
     // call local kernel function
-    process_make_exit( process , sig_id ); 
+    process_make_exit( pid , sig_id ); 
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -791,4 +784,5 @@
     rpc.index     = RPC_THREAD_USER_CREATE;
     rpc.response  = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -799,5 +793,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -883,4 +877,5 @@
     rpc.index    = RPC_THREAD_KERNEL_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -890,5 +885,5 @@
     
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -956,4 +951,5 @@
     rpc.index    = RPC_THREAD_KILL;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -961,5 +957,5 @@
     
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
 rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -997,31 +993,18 @@
 /////////////////////////////////////////////////////////////////////////////////////////
 
-///////////////////////////////////////////////////
-void rpc_process_sigaction_client( cxy_t       cxy,
-                                   process_t * process,        // in
-                                   uint32_t    sigaction,      // in
-                                   xptr_t      rsp_xp,         // in
-                                   xptr_t      client_xp )     // in
-{
-sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
-__FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD ,
-local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
-
-    // initialise RPC descriptor header 
-    rpc_desc_t  rpc;
-    rpc.index    = RPC_PROCESS_SIGACTION;
-
-    // set input arguments in RPC descriptor  
-    rpc.args[0] = (uint64_t)(intptr_t)process;
-    rpc.args[1] = (uint64_t)sigaction;
-    rpc.args[2] = (uint64_t)rsp_xp;
-    rpc.args[3] = (uint64_t)client_xp;
-
-    // register RPC request in remote RPC fifo (non blocking)
-    rpc_send( cxy , &rpc , false );
-
-sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
-__FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD ,
-local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
+////////////////////////////////////////////////////
+void rpc_process_sigaction_client( cxy_t        cxy,
+                                   rpc_desc_t * rpc_ptr )
+{
+sigaction_dmsg("\n[DBG] %s : enter to %s process %x in cluster %x / cycle %d\n",
+__FUNCTION__ , process_action_str( (uint32_t)rpc_ptr->args[0] ) ,
+((process_t *)(intptr_t)rpc_ptr->args[1])->pid , cxy , (uint32_t)hal_get_cycles() );
+
+    // register RPC request in remote RPC fifo 
+    rpc_send( cxy , rpc_ptr );
+
+sigaction_dmsg("\n[DBG] %s : exit after %s process %x in cluster %x / cycle %d\n",
+__FUNCTION__ , process_action_str( (uint32_t)rpc_ptr->args[0] ) ,
+((process_t *)(intptr_t)rpc_ptr->args[1])->pid , cxy , (uint32_t)hal_get_cycles() );
 }  
 
@@ -1029,31 +1012,43 @@
 void rpc_process_sigaction_server( xptr_t xp )
 {
-    process_t * process;
-    uint32_t    action;  
-    xptr_t      rsp_xp;
-    xptr_t      client_xp;
-
-    // get client cluster identifier and pointer on RPC descriptor
-    cxy_t        client_cxy  = (cxy_t)GET_CXY( xp );
-    rpc_desc_t * desc        = (rpc_desc_t *)GET_PTR( xp );
+    process_t  * process;          // pointer on local process descriptor
+    uint32_t     action;           // sigaction index
+    thread_t   * client_ptr;       // local pointer on client thread in client cluster
+    cxy_t        client_cxy;       // client cluster identifier
+    xptr_t       client_xp;        // extended pointer on client thread
+    core_t     * client_core;      // local pointer on core running the client thread
+    rpc_desc_t * rpc;              // local pointer on rpc descriptor in client cluster
+
+    // get client cluster identifier and pointer on RPC descriptor
+    client_cxy = (cxy_t)GET_CXY( xp );
+    rpc        = (rpc_desc_t *)GET_PTR( xp );
 
     // get arguments from RPC descriptor
-    process   = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &desc->args[0] ) );
-    action    = (uint32_t)             hal_remote_lwd( XPTR( client_cxy , &desc->args[1] ) );
-    rsp_xp    = (xptr_t)               hal_remote_lwd( XPTR( client_cxy , &desc->args[2] ) );
-    client_xp = (xptr_t)               hal_remote_lwd( XPTR( client_cxy , &desc->args[3] ) );
-    
-sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
-__FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD ,
-local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
+    action      = (uint32_t)             hal_remote_lwd( XPTR( client_cxy , &rpc->args[0] ) );
+    process     = (process_t *)(intptr_t)hal_remote_lwd( XPTR( client_cxy , &rpc->args[1] ) );
+    client_ptr  = (thread_t *)hal_remote_lpt( XPTR( client_cxy , &rpc->thread ) );
+
+    // build extended pointer on client thread
+    client_xp = XPTR( client_cxy , client_ptr );
+
+sigaction_dmsg("\n[DBG] %s : enter to %s process %x / cycle %d\n",
+__FUNCTION__ , process_action_str( action ) , process->pid , (uint32_t)hal_get_cycles() );
 
     // call relevant kernel function
-    if      (action == DELETE_ALL_THREADS  ) process_delete ( process , rsp_xp , client_xp ); 
-    else if (action == BLOCK_ALL_THREADS   ) process_block  ( process , rsp_xp , client_xp ); 
-    else if (action == UNBLOCK_ALL_THREADS ) process_unblock( process , rsp_xp , client_xp );
-
-sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
-__FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD ,
-local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
+    if      (action == DELETE_ALL_THREADS  ) process_delete ( process , client_xp ); 
+    else if (action == BLOCK_ALL_THREADS   ) process_block  ( process , client_xp ); 
+    else if (action == UNBLOCK_ALL_THREADS ) process_unblock( process             );
+
+    // decrement the responses counter in RPC descriptor,
+    // unblock the client thread only if it is the last response.
+    if( hal_remote_atomic_add( XPTR( client_cxy , &rpc->response ) , -1 ) == 1 ) 
+    {
+        client_core = (core_t *)hal_remote_lpt( XPTR( client_cxy , &client_ptr->core ) );
+        thread_unblock( client_xp , THREAD_BLOCKED_RPC );
+        dev_pic_send_ipi( client_cxy , client_core->lid );
+    }
+
+sigaction_dmsg("\n[DBG] %s : exit after %s process %x / cycle %d\n",
+__FUNCTION__ , process_action_str( action ) , process->pid , (uint32_t)hal_get_cycles() );
 } 
 
@@ -1085,4 +1080,5 @@
     rpc.index    = RPC_VFS_INODE_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1097,5 +1093,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -1178,4 +1174,5 @@
     rpc.index    = RPC_VFS_INODE_DESTROY;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1183,5 +1180,5 @@
     
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -1236,4 +1233,5 @@
     rpc.index    = RPC_VFS_DENTRY_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1243,5 +1241,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -1315,4 +1313,5 @@
     rpc.index    = RPC_VFS_DENTRY_DESTROY;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1320,5 +1319,5 @@
     
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -1373,4 +1372,5 @@
     rpc.index    = RPC_VFS_FILE_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1379,5 +1379,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -1442,4 +1442,5 @@
     rpc.index    = RPC_VFS_FILE_DESTROY;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1447,5 +1448,5 @@
     
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -1499,4 +1500,5 @@
     rpc.index    = RPC_VFS_INODE_LOAD;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1506,5 +1508,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -1573,4 +1575,5 @@
     rpc.index    = RPC_VFS_MAPPER_LOAD_ALL;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1578,5 +1581,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -1638,4 +1641,5 @@
     rpc.index    = RPC_FATFS_GET_CLUSTER;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1645,5 +1649,5 @@
 
     // register RPC request in remote RPC fifo 
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output argument from rpc descriptor
@@ -1711,4 +1715,5 @@
     rpc.index    = RPC_VMM_GET_VSEG;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1717,5 +1722,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output argument from rpc descriptor
@@ -1786,4 +1791,5 @@
     rpc.index    = RPC_VMM_GET_PTE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1793,5 +1799,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output argument from rpc descriptor
@@ -1860,4 +1866,5 @@
     rpc.index    = RPC_THREAD_USER_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1865,5 +1872,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output arguments from RPC descriptor
@@ -1923,4 +1930,5 @@
     rpc.index    = RPC_THREAD_USER_CREATE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1929,5 +1937,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -1986,4 +1994,5 @@
     rpc.index    = RPC_MAPPER_MOVE_BUFFER;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -1996,5 +2005,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -2083,4 +2092,5 @@
     rpc.index    = RPC_MAPPER_GET_PAGE;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -2089,5 +2099,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -2151,4 +2161,5 @@
     rpc.index    = RPC_VMM_CREATE_VSEG;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -2163,5 +2174,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     // get output values from RPC descriptor
@@ -2230,4 +2241,5 @@
     rpc.index    = RPC_SCHED_DISPLAY;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -2235,5 +2247,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
@@ -2282,4 +2294,5 @@
     rpc.index    = RPC_VMM_SET_COW;
     rpc.response = 1;
+    rpc.blocking = true;
 
     // set input arguments in RPC descriptor 
@@ -2287,5 +2300,5 @@
 
     // register RPC request in remote RPC fifo (blocking function)
-    rpc_send( cxy , &rpc , true );
+    rpc_send( cxy , &rpc );
 
     rpc_dmsg("\n[DBG] %s : exit / thread %x on core[%x,%d] / cycle %d\n",
