[comp.sys.isis] Broadcasting messages in messages

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.