From: bdemsky Date: Tue, 22 Sep 2009 19:15:11 +0000 (+0000) Subject: bug fix X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=09700dd8510a62b141e53df26b5b1c88f01dd1db;p=IRC.git bug fix --- diff --git a/Robust/src/Runtime/DSTM/interface/dstmserver.c b/Robust/src/Runtime/DSTM/interface/dstmserver.c index edfbb4e8..0cb3490d 100644 --- a/Robust/src/Runtime/DSTM/interface/dstmserver.c +++ b/Robust/src/Runtime/DSTM/interface/dstmserver.c @@ -747,7 +747,6 @@ int prefetchReq(int acceptfd, struct readstruct * readbuffer) { objheader_t *header; oidmidpair_t oidmid; int sd = -1; - while(1) { recv_data_buf((int)acceptfd, readbuffer, &numoffset, sizeof(int)); if(numoffset == -1) @@ -840,7 +839,6 @@ int prefetchReq(int acceptfd, struct readstruct * readbuffer) { //Release socket if (mid!=-1) freeSockWithLock(transPResponseSocketPool, mid, sd); - return 0; } diff --git a/Robust/src/Runtime/DSTM/interface/queue.c b/Robust/src/Runtime/DSTM/interface/queue.c index 8ebff808..41e44033 100644 --- a/Robust/src/Runtime/DSTM/interface/queue.c +++ b/Robust/src/Runtime/DSTM/interface/queue.c @@ -8,12 +8,16 @@ pthread_cond_t qcond; #define QSIZE 2048 //2 KB +#ifdef LOGEVENTS extern char bigarray[16*1024*1024]; extern int bigindex; #define LOGEVENT(x) { \ int tmp=bigindex++; \ bigarray[tmp]=x; \ } +#else +#define LOGEVENT(x) +#endif void queueInit(void) { /* Intitialize primary queue */ diff --git a/Robust/src/Runtime/DSTM/interface/trans.c b/Robust/src/Runtime/DSTM/interface/trans.c index 36465abb..2db0e84c 100644 --- a/Robust/src/Runtime/DSTM/interface/trans.c +++ b/Robust/src/Runtime/DSTM/interface/trans.c @@ -79,13 +79,16 @@ void printhex(unsigned char *, int); plistnode_t *createPiles(); plistnode_t *sortPiles(plistnode_t *pileptr); +#ifdef LOGEVENTS char bigarray[16*1024*1024]; int bigindex=0; #define LOGEVENT(x) { \ int tmp=bigindex++; \ bigarray[tmp]=x; \ } - +#else +#define LOGEVENT(x) +#endif /******************************* * Send and Recv function calls @@ -106,9 +109,43 @@ void send_data(int fd, void *buf, int buflen) { } } +void recv_dataz(int fd, void *buf, int buflen) { + char *buffer = (char *)(buf); + int size = buflen; + int numbytes; + while (size > 0) { + numbytes = recv(fd, buffer, size, 0); + bytesRecv = bytesRecv + numbytes; + if (numbytes == -1) { + perror("recv"); + exit(0); + } + buffer += numbytes; + size -= numbytes; + } +} + +int recv_data_errorcodez(int fd, void *buf, int buflen) { + char *buffer = (char *)(buf); + int size = buflen; + int numbytes; + while (size > 0) { + numbytes = recv(fd, buffer, size, 0); + if (numbytes==0) + return 0; + if (numbytes == -1) { + perror("recv"); + return -1; + } + buffer += numbytes; + size -= numbytes; + } + return 1; +} + + void recv_data_buf(int fd, struct readstruct * readbuffer, void *buffer, int buflen) { char *buf=(char *)buffer; - int numbytes=readbuffer->head-readbuffer->tail; if (numbytes>buflen) numbytes=buflen; @@ -117,13 +154,12 @@ void recv_data_buf(int fd, struct readstruct * readbuffer, void *buffer, int buf readbuffer->tail+=numbytes; buflen-=numbytes; buf+=numbytes; - if (buflen==0) { - return; - } } - + if (buflen==0) { + return; + } if (buflen>=MAXBUF) { - recv_data(fd, buf, buflen); + recv_dataz(fd, buf, buflen); return; } @@ -156,12 +192,12 @@ int recv_data_errorcode_buf(int fd, struct readstruct * readbuffer, void *buffer readbuffer->tail+=numbytes; buflen-=numbytes; buf+=numbytes; - if (buflen==0) - return 1; } + if (buflen==0) + return 1; if (buflen>=MAXBUF) { - return recv_data_errorcode(fd, buf, buflen); + return recv_data_errorcodez(fd, buf, buflen); } int maxbuf=MAXBUF; @@ -784,7 +820,7 @@ int transCommit() { trans_commit_data_t transinfo; /* keeps track of objs locked during transaction */ char finalResponse; -#ifdef TRANSSTATS +#ifdef LOGEVENTS int iii; for(iii=0;iii