Message boards : API : Inconsistent Trickle Down Message Behavior
Message board moderation
Author | Message |
---|---|
Send message Joined: 23 Oct 15 Posts: 5 |
Hi all, I would like to add trickle_down message handling to my app. I am experiencing some strange and sporadic behavior from my implementation (I used https://boinc.berkeley.edu/trac/wiki/TrickleApi, as well as uc2.cpp and trickle_echo.cpp to help me complete it). I would like the app to send a trickle_up message, and then have it "echoed" back to the app from the server. It looks like the trickle_up message and the trickle handler are working, at least from what I can see in the database. Around 50% of the time, the trickle_down message never reaches the app. In the times that my app DOES pick up a trickle_down message, it reads something like this: trickle_ (19655): when the message in the database's "msg_to_host" is: <trickle_down> <result_name>test_app_nodelete_0</result_name> <time>1456539574</time> what am I? </trickle_down> To receive the trickle_down message I have created a loop which periodically polls for the presence of a reply. I've included that code below. As it is written now, it will very often timeout, but if I remove the timeout the system simply hangs indefinitely every other time I run it. int retrieve_trickle_reply(char* reply) { int retval, i = 0; char buf[256]; // Poll periodically until trickle recieved or timeout retval = boinc_receive_trickle_down(reply, sizeof(reply)); while (!retval && i < TIMEOUT) { boinc_sleep(POLL_IVAL); retval = boinc_receive_trickle_down(reply, sizeof(reply)); ++i; } fprintf(stderr, "%s i count is: %d\n", boinc_msg_prefix(buf, sizeof(buf)), i ); fprintf(stderr, "%s reply is: %s\n", boinc_msg_prefix(buf, sizeof(buf)), reply ); if (i == TIMEOUT) { return 1; } return 0; } Any ideas? Another note: I know that in uc2.cpp the return value of "boinc_receive_trickle_down" is treated as if "0" is a reply and any other value is "no reply". Looking at the source code I am fairly confident that it is the other way around. In any case I have tried both interpretations and neither works. Thanks! Thomas |
Send message Joined: 15 Mar 16 Posts: 1 |
Check your buffer is large enough. You are holding the thread back with sleep. I would suggest freeing up the thread and not timing out to diagnose. |
Send message Joined: 23 Oct 15 Posts: 5 |
Hi James, Thanks so much for the reply! The buffer size sounds like a good place to look. Do you mind expanding on what you mean by "holding the thread back with sleep"? Specifically I would be curious to understand the causal chain of consequences this has - I have been treating boinc-sleep essentially as the system "sleep" command. Is there a more BOINC-idiomatic approach to implementing my busy wait routine? |
Copyright © 2024 University of California.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.2 or any later version published by the Free Software Foundation.