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
I guess this should be explained in the docs. Please consider the small
patch I attach.
--- 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