#ifndef _sr_si_static_c
#define _sr_si_static_c
-static void dump_40( char *p, char* label ) {
+static void dump_n( char *p, char* label, int n ) {
int i;
+ int j;
+ int t = 0;
+ int rows;
+
- if( label )
- fprintf( stderr, ">>>>> %s p=%p\n", label, p );
+ if( label ) {
+ fprintf( stderr, ">>>>> %s p=%p %d bytes\n", label, p, n );
+ }
+
+ rows = (n/16) + ((n % 16) ? 1 : 0);
+
+ for( j = 0; j < rows; j++ ) {
+ fprintf( stderr, "%04x: ", j * 16 );
- for( i = 0; i < 40; i++ ) {
- fprintf( stderr, "%02x ", (unsigned char) *(p+i) );
+ for( i = 0; t < n && i < 16; i++, t++ ) {
+ fprintf( stderr, "%02x ", (unsigned char) *p );
+ p++;
+ }
+ fprintf( stderr, "\n" );
}
- fprintf( stderr, "\n" );
+}
+
+/*
+ backwards compatability.
+*/
+static void dump_40( char *p, char* label ) {
+ dump_n( p, label, 40 );
}
/*
msg->alloc_len = 0; // force tp_buffer realloc below
if( msg->tp_buf ) {
free( msg->tp_buf );
+ msg->tp_buf = NULL;
}
} else {
mlen = msg->alloc_len; // msg given, allocate the same size as before
abort( ); // toss out a core file for this
}
-/*
+#ifdef DEBUG
memset( msg->tp_buf, 0, mlen ); // NOT for production (debug only) valgrind will complain about uninitalised use if we don't set
memcpy( msg->tp_buf, "@@!!@@!!@@!!@@!!@@!!@@!!@@!!@@!!**", TP_HDR_LEN ); // NOT for production -- debugging eyecatcher
-*/
+#endif
+
alen = (int *) msg->tp_buf;
*alen = mlen; // FIX ME: need a stuct to go in these first bytes, not just dummy len
msg->payload = PAYLOAD_ADDR( hdr ); // point to payload (past all header junk)
msg->xaction = ((uta_mhdr_t *)msg->header)->xid; // point at transaction id in header area
msg->state = state; // fill in caller's state (likely the state of the last operation)
- msg->flags |= MFL_ZEROCOPY; // this is a zerocopy sendable message
+ msg->flags = MFL_ZEROCOPY; // this is a zerocopy sendable message
msg->ring = ctx->zcb_mring; // original msg_free() api doesn't get context so must dup on eaach :(
strncpy( (char *) ((uta_mhdr_t *)msg->header)->src, ctx->my_name, RMR_MAX_SRC );
strncpy( (char *) ((uta_mhdr_t *)msg->header)->srcip, ctx->my_ip, RMR_MAX_SRC );
nm->len = old_msg->len; // length of data in the payload
nm->alloc_len = mlen; // length of allocated payload
- nm->xaction = hdr->xid; // reference xaction
+ nm->xaction = &hdr->xid[0]; // reference xaction
nm->state = old_msg->state; // fill in caller's state (likely the state of the last operation)
nm->flags = old_msg->flags | MFL_ZEROCOPY; // this is a zerocopy sendable message
memcpy( nm->payload, old_msg->payload, old_msg->len );
nm->len = old_msg->len; // length of data in the payload
nm->alloc_len = mlen; // length of allocated payload
- nm->xaction = hdr->xid; // reference xaction
+ nm->xaction = &hdr->xid[0]; // reference xaction
nm->state = old_msg->state; // fill in caller's state (likely the state of the last operation)
nm->flags = old_msg->flags | MFL_ZEROCOPY; // this is a zerocopy sendable message
memcpy( nm->payload, old_msg->payload, old_msg->len );
if( DEBUG ) rmr_vlog( RMR_VL_DEBUG, "reallocate for payload increase. new message size: %d\n", (int) mlen );
if( (nm->tp_buf = (char *) malloc( sizeof( char ) * mlen )) == NULL ) {
rmr_vlog( RMR_VL_CRIT, "rmr_realloc_payload: cannot get memory for zero copy buffer. bytes requested: %d\n", (int) mlen );
+ free( nm );
return NULL;
}