[ROOT] TMessage quirks

From: Matevz Tadel (Matevz.Tadel@ijs.si)
Date: Mon Aug 14 2000 - 17:11:48 MEST


Hi,

TMessage seems to be a bit unappropriate for routing messages because it
requires transitions from read<->write. Once you have a message in read
mode it is a bit of a nightmare to send it to another consumer. The root
of the problem is in skipping the sizeof(UInt_t) in constructor for
TMessage in read mode (as called from TSocket::Recv). I modified the
relevant code in TSocket and TMessage (just some 4 lines or so) to keep
these extra bytes and write the true length of received message into them.

Now i feel tempted to write sth like
Int_t
TMessage::PrepareToSend() {
  if(IsReading()) {
    UInt_t len = *((UInt_t*)fBuffer);
    if(len==0) return 1; // die horribly if len==0
    fBufCurr = fBuffer + len + sizeof(UInt_t);
    SetWriteMode();
  }
  return 0;
}

+ sth equiv for PrepareToRead()

Is there a chance to get this into official distribution?

After all ... sparing 4(or 8) bytes is not that great ... especially with
minimum buffer size = 128b. (at first i thought it is optimised for null
messages ... when just What() matters)

Am i missing a point here?

Cheers,
matevz

-- 
---------------------------------------------------
 Matevz Tadel,         E-mail: Matevz.Tadel@ijs.si 
 Department of Experimental High Energy Physics F9 
 Jozef Stefan Institute,  Jamova 39,  P.o.Box 3000 
 SI-1001 Ljubljana, Slovenia                       
 Tel.: +386-61-177-3674      Fax: +386-61-125-7074 
---------------------------------------------------



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET