l4-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Viengoos IPC


From: James Collier
Subject: Re: Viengoos IPC
Date: Sun, 05 Jul 2009 11:08:18 +1000

Hello again,
I've continued playing with IPC on Viengoos.
I've think had some success but I'd run up against what feels like a
brick wall now.
I have a child thread sending a message to the parent (main) thread.
I start the child thread with pthread_create, except it apparently never
starts.

Following is the child thread code for sending the IPC:
<code>
void
hello_sender(int argc, char** argv)
{
  if(argc != 1) pthread_exit(NULL);

  vg_addr_t recv_messenger =
         vg_addr_chop(VG_PTR_TO_ADDR(argv[0]),PAGESIZE_LOG2);
  struct hurd_message_buffer *mb = hurd_message_buffer_alloc();

  s_printf("running second thread.\n");
  vg_send(VG_IPC_RECEIVE_SET_THREAD_TO_CALLER |
          VG_IPC_RECEIVE_SET_ASROOT_TO_CALLERS,
          /*activity*/VG_ADDR_VOID, recv_messenger, mb->sender,
          VG_PTR_TO_PAGE(mb->request));

  hurd_message_buffer_free(mb);
  s_printf("Finished child thread\n");
  pthread_exit(NULL);
}
</code>

I never see "running second thread" printed.
Following is the code for the parent (main) thread:

<code>
int
main (int argc, char *argv[])
{
  activity = __hurd_startup_data->activity;
  s_printf ("Running messenger...\n");
  struct hurd_message_buffer *mb = hurd_message_buffer_alloc();

  pthread_t srvr;
  pthread_create(&srvr, NULL, (void *) &hello_sender,
                 VG_ADDR_TO_PTR(vg_addr_extend(mb->receiver_strong, 0,
                        PAGESIZE_LOG2)));


  error_t err;
  err = vg_ipc(VG_IPC_RECEIVE | VG_IPC_RECEIVE_ACTIVATE |
               VG_IPC_SEND_SET_THREAD_TO_CALLER |
               VG_IPC_SEND_SET_ASROOT_TO_CALLERS,
               VG_ADDR_VOID, 
               mb->receiver_strong,VG_PTR_TO_PAGE(mb->reply),
               VG_ADDR_VOID, VG_ADDR_VOID,
               VG_ADDR_VOID, VG_ADDR_VOID);
  s_printf("Received message!\n");
  pthread_join(srvr, NULL);
  hurd_message_buffer_free(mb);
  return 0;
}
</code>

I also never see "Received message!" printed.
Thanks for any advice.

James C (jColl)

-- 
James Collier <address@hidden>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]