Ignacio García Pérez wrote:
Philippe Gerum wrote:


Ignacio García Pérez wrote:


RT_PIPE_MSG *m = rt_pipe_alloc(sizeof(mystruct_t));
mystruct_t *p = (mystruct_t *)P_MSGPTR(m);
p->whatever1 = X;
p->whatever2 = X;
rt_pipe_send(&mypipe, m, sizeof(mystruct_t), P_NORMAL);

If this is correct, why do I have to specify the size of mystruct_t
*twice*. Can't it be initialized by rt_pipe_alloc ?.


It's initialized actually (*).


So, what's the sense of having to specify it again whet calling
rt_pipe_send ?


Because you may (pre-)allocate more than you really need to send
afterwards.


I guess this should be explained in the docs. Please consider the small
patch I attach.


Ok, applied. Thanks.

Nacho.


------------------------------------------------------------------------

Index: skins/native/pipe.c
===================================================================
--- skins/native/pipe.c (revision 143)
+++ skins/native/pipe.c (working copy)
@@ -598,7 +598,11 @@
  *
  * @param size The size in bytes of the message (payload data
  * only). Zero is a valid value, in which case the service returns
- * immediately without sending any message.
+ * immediately without sending any message. This parameter allows
+ * you to actually send less data than you reserved using the
+ * rt_pipe_alloc() service, which may be the case if you did not
+ * know how much space you needed at the time of allocation. In all
+ * other cases it may be more convenient to just pass P_MSGSIZE(msg).
  *
  * Additionally, rt_pipe_send() causes any data buffered by
  * rt_pipe_stream() to be flushed prior to sending the message. For


--

Philippe.

Reply via email to