usenet@cps3xx.UUCP (Usenet file owner) (08/16/89)
I'm attempting to broadcast messages inside messages. update() does the broadcast to to the registered entry, receive(). But when receive() attempts to extract the message from the message I get the message: msg_reconstruct: inconsistency in data block The value returned in msg_p is null. Am I doing something wrong? Alan Cabrera ------------------------------------------------------------------------------- update () { message *msg_p; int i; msg_p = msg_newmsg (); for (i=0; i<10; i++) msg_put (msg_p, "%d", i); bcast (gaddr, RECEIVE, "%m", msg_p, 0); msg_delete (msg_p); } receive (mp) message *mp; { int index, i; message *msg_p; msg_get (mp, "%m", &msg_p); for (i=0; i<finish-start+1; i++) { msg_get (msg_p, "%d", &index); } msg_delete (msg_p); update (); }
ken@gvax.cs.cornell.edu (Ken Birman) (08/16/89)
>> Alan Cabrera puts a message in another message and then >> has probelsm reconstructing it. He asks "am I doing something >> wrong"... I copied your program into my machine and ran it. Here's my full-length program: #include "isis.h" address *gid; int receive(); main(argc, argv) { isis_init(1643); isis_start_done(); isis_entry(1, receive, "receive"); gid = pg_join("test", 0); update(); isis_mainloop(0); } update () { message *msg_p; int i; msg_p = msg_newmsg (); for (i=0; i<10; i++) msg_put (msg_p, "%d", i); bcast (gid, 1, "%m", msg_p, 0); msg_delete (msg_p); } #define finish 10 #define start 1 receive (mp) message *mp; { int index, i; message *msg_p; print("receive mp: "); pmsg(mp); msg_get (mp, "%m", &msg_p); for (i=0; i<finish-start+1; i++) { msg_get (msg_p, "%d", &index); print("... extracted %d\n", index); } msg_delete (msg_p); update (); } ... and here is a sample of the output: receive mp: MSG 5e678 from (53/0:26895.0) to (53/0:26895.receive) msgid 458 size 364 ... extracted 0 ... extracted 1 ... extracted 2 ... extracted 3 ... extracted 4 ... extracted 5 ... extracted 6 ... extracted 7 ... extracted 8 ... extracted 9 receive mp: MSG 5e64c from (53/0:26895.0) to (53/0:26895.receive) msgid 460 size 364 ... extracted 0 ... extracted 1 ... extracted 2 ... extracted 3 ... extracted 4 ... extracted 5 ... extracted 6 ... extracted 7 ... extracted 8 ... extracted 9 receive mp: MSG 5e678 from (53/0:26895.0) to (53/0:26895.receive) msgid 462 size 364 ... extracted 0 ... extracted 1 ... extracted 2 ... extracted 3 ... extracted 4 ... extracted 5 ... extracted 6 ... extracted 7 ... extracted 8 ... extracted 9 receive mp: MSG 5e64c from (53/0:26895.0) to (53/0:26895.receive) msgid 464 size 364 ... extracted 0 ... extracted 1 ... extracted 2 ... extracted 3 ... extracted 4 ... extracted 5 ... extracted 6 ... extracted 7 ... extracted 8 ... extracted 9 receive mp: MSG 5e678 from (53/0:26895.0) to (53/0:26895.receive) msgid 466 size 364 ... extracted 0 ... extracted 1 ... extracted 2 ... extracted 3 ... extracted 4 ... extracted 5 ... extracted 6 From this I would conclude that either your full length program actually is doing something wrong, or you are running a beta release of ISIS V1.2 with a buggy copy of mlib (I changed something in the beta-testing stage that was causing message problems, although I don't see how it would explain the specific error you describe), or perhaps there is actually an ISIS bug but your example wasn't the one that provoked it. As a matter of fact, I have also noticed a message-reconstruct complaint from cl_inter.c, but only with the BYPASS mode enabled. Perhaps you enabled this just to see what it does? If so, you are running code known to be buggy and would be better off waiting (granted, the speedup is pretty dramatic). I suggest that we take this discussion offline. A better place to report apparent bugs would be isis-bugs@cs.cornell.edu. We always respond quickly, and if a problem turns out to be serious enough I post the fix to comp.sys.isis after confirming and fixing it.