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.
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