]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Fixed empty request alignment bug
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 7 Oct 2008 21:48:22 +0000 (23:48 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 7 Oct 2008 21:48:22 +0000 (23:48 +0200)
When a request without any parameters was sent, the length of request
header was not multiple of 8. This caused problem at receive side, which
expected the header to have length divisible by 8.

src/cdr.c
src/iop.c
src/proto.c

index 85999d2f549f2ed2fa5db6e0bbdbbbc420da2ed9..4009da7d7ff8a7d5e4ff66cc36526394ef47a3b1 100644 (file)
--- a/src/cdr.c
+++ b/src/cdr.c
@@ -218,6 +218,7 @@ CORBA_boolean CDR_put_align(CDR_Codec *codec, unsigned bsize)
                codec->buffer[i++] = '\0';
 
        codec->wptr = forward;
+       if (codec->wptr > codec->wptr_last) codec->wptr_last = codec->wptr;
        return CORBA_TRUE;
 }
 
index 38b915a651de2423568e037f749c45f8542c30af..3ca1c5e809bfad4073ea3d4d75b529dd2c4d850c 100644 (file)
--- a/src/iop.c
+++ b/src/iop.c
@@ -291,7 +291,8 @@ process_request(forb_port_t *port, CDR_Codec *codec, uint32_t message_size)
                                      0);
                if (!ret) {
                        env.major = FORB_EX_NO_MEMORY;
-                       ul_logerr("No memory for executor request bufer\n");
+                       ul_logerr("No memory for executor request bufer of size %d (header_size=%d)\n",
+                                 req_size, header_size);
                        goto send_execption;
                }
                exec_req->codec.data_endian = codec->data_endian;
index 6d89450c5a4c6a29bdd3168052d8dccb9d9097c3..d142e9ea0241d7bfe57a8c6b98f3ccad8cab89cc 100644 (file)
 #include <forb/config.h>
 #include <stdio.h>
 #include <forb/object.h>
+#include <ul_log.h>
+
+extern UL_LOG_CUST(ulogd_forb_proto);
 
 size_t forb_proto_send(forb_peer_t *peer, CDR_Codec *codec)
 {
+       
+#if 0
+       {
+               int i, j;
+               char m[1000];
+               i=j=0;
+               while (i<CDR_data_size(codec) && j<sizeof(m)-3) {
+                       if (i>0 && i%4 == 0) {
+                               m[j++] = ' ';
+                       }
+                       sprintf(&m[j], "%02x", codec->buffer[i+codec->rptr]);
+                       j+=2;
+                       i+=1;
+               }
+               ul_logdeb("sending: %s\n", m);
+       }
+#endif
+       
        return peer->port->proto->send(peer, &codec->buffer[codec->rptr],
                                       CDR_data_size(codec));
 }