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.

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

Reply via email to