Hi Miklos,

you were right. I did not put the messages back into the pool in the case of 
failure. I corrected this in my example application and now I am no longer able 
to reproduce the error I had before. I wonder though why this is the case since 
as I said before I never had a run in which a send() or sendDone() gave me an 
error, so all packets from the pool should have been returned to the pool after 
sending. Does this mean that I have to write code like this to make sure my 
application works properly?:

function {
        if(whatever) {
                do something with the message_t from pool;
                return message_t to pool;
                return from function;
        }
        else {
                do something else with the message_t from pool;
                return message_t to pool;
                return from function;
        }
        
        return message_t to pool;
        return from function;
}

In my eyes the code after the if-else statement is unnecessary since I will 
never get there. But in my example application the code that was never reached 
in a test run (even though it was reachable in contrast to the example above) 
nevertheless changed my programs behavior. In my real program I do still get 
the described error and I do not know where to search for leaking packets or 
other errors anymore.

Thanks for your advice
David

Am 20.06.2011 um 15:27 schrieb Miklos Maroti:

> Hi David,
> 
> On Mon, Jun 20, 2011 at 12:39 PM, David Piotrowski <tin...@zeroflag.eu> wrote:
>> Hi Miklos,
>> 
>> I do not get failures, send returns just fine. I am also releasing the 
>> packets back to the pool after sondDone occurs.
> 
> No, you do NOT put back the message after a sendDone(FAIL) even or a
> send command which fails.
> 
>> The packets from the pool are only manipulated after I get them from the 
>> pool and before I release them to the pool again, so I think even if they 
>> get corrupted in the pool they should be properly setup again before sending 
>> them. I am not using Packet.clear though. I'll try that and see whether it 
>> has any influence on my results.
> 
> You should call Packet.clear(). I suppose, that the MessagePool
> maintains a linked list of entries and stores pointers and that
> corrupts the internal layout, so you have to call Packet.clear() for
> each message.
> 
> Best,
> Miklos
> 
>> 
>> Thanks for your input.
>> David
>> 
>> Am 19.06.2011 um 23:45 schrieb Miklos Maroti:
>> 
>>> Hi David,
>>> 
>>> Do you see any failures? (send fails or sendDone fails?) If any of
>>> those occur, then you have to put the message back to the pool.
>>> 
>>> Another thing you should do: call Packet.clear before you set up the
>>> data in the message. The values in the pool can be corrupted. I think
>>> this is the source of your problems.
>>> 
>>> Best,
>>> Miklos
>>> 
>>> On Sun, Jun 19, 2011 at 11:33 PM, David Piotrowski <tin...@zeroflag.eu> 
>>> wrote:
>>>> Hello again,
>>>> 
>>>> I did some more investigations on the ACK error I described in my previous 
>>>> mail. It seems like I had quite the same error about a year ago but since 
>>>> then I used tossim quite a lot and the error did not show up there.
>>>> 
>>>> I have written a small example application that shows the error I have. 
>>>> The application has a fixed message_t variable and a pool from which it 
>>>> gets another message_t. It then sends the fixed message_t and the 
>>>> message_t from the pool alternately over and over again. Upon reception 
>>>> the receiving node lights the received message on its LED. The nodes print 
>>>> some debugging information out on the screen showing which kind of 
>>>> message_t they are actually sending and if it is acknowledged.
>>>> 
>>>> Depending on the size of the pool used I get different behavior when it 
>>>> comes to acknowledgements. For me the configuration of the program 
>>>> appended yields no ack for packets that come from the pool but the packets 
>>>> not coming from the pool all get acknowledgements. Other pool sizes yield 
>>>> other results. In several (maybe all?) configurations the first two 
>>>> packets never get acknowledged independent of whether they come from the 
>>>> pool or not. Another thing to notice is that although the packets are not 
>>>> acknowledged, they have been properly received, which is signaled by the 
>>>> blinking LEDs. In some configurations the behaviour of ACKs changes 
>>>> between resets of the node.
>>>> 
>>>> I am really searching for some advice on this. The actual program I am 
>>>> working on is using at least two pools, which I suspect are the reason why 
>>>> I never get an ack there although all the messages sent are received and 
>>>> everything is working flawless in tossim.
>>>> 
>>>> Thanks, David.
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Tinyos-help mailing list
>>>> Tinyos-help@millennium.berkeley.edu
>>>> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>>>> 
>> 
>> 


_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to