Browse code

webkernel: fix str_findfirstempty, wk_service, sbuf and client allocation, wk_clientserviceread

Dario Rodriguez authored on 21/06/2014 09:41:14
Showing 1 changed files
... ...
@@ -204,7 +204,7 @@ wk_service(wk *paramweb)
204 204
         wk_client *client;
205 205
         if(web==NULL)
206 206
                 return(-1);
207
-        while((n=sselect_getreadfiltered(web,&(web->fdset),fds,sizeof(fds)/sizeof(fds[0])))>0) {
207
+        while((n=sselect_getreadfiltered(web->ssel,&(web->fdset),fds,sizeof(fds)/sizeof(fds[0])))>0) {
208 208
                 for(i=0;i<n;i++) {
209 209
                         fd=fds[i];
210 210
                         if(fd==web->serverfd) {
... ...
@@ -238,7 +238,7 @@ wk_service(wk *paramweb)
238 238
                         }
239 239
                 }
240 240
         }
241
-        while((n=sselect_getwritefiltered(web,&(web->fdset),fds,sizeof(fds)/sizeof(fds[0])))>0) {
241
+        while((n=sselect_getwritefiltered(web->ssel,&(web->fdset),fds,sizeof(fds)/sizeof(fds[0])))>0) {
242 242
                 for(i=0;i<n;i++) {
243 243
                         fd=fds[i];
244 244
                         if((client=(wk_client *)sselect_getuserptr(web->ssel,fd))==NULL || client->web!=(wk *)web)
... ...
@@ -548,7 +548,7 @@ wk_sbufacquire(wk *paramweb)
548 548
         /* make sure there are free bufblocks */
549 549
         if(web->usedbufblocks==web->sizebufblocks) {
550 550
                 wk_bufblock *newbb;
551
-                if((newbb=(wk_bufblock *)realloc(web->bufblocks,web->sizebufblocks+BUFBLOCKBLOCK))==NULL)
551
+                if((newbb=(wk_bufblock *)realloc(web->bufblocks,(web->sizebufblocks+BUFBLOCKBLOCK)*sizeof(wk_bufblock)))==NULL)
552 552
                         return(-1); /* insufficient memory */
553 553
                 web->bufblocks=newbb;
554 554
                 memset(web->bufblocks+web->sizebufblocks,0,BUFBLOCKBLOCK*sizeof(wk_bufblock));
... ...
@@ -569,6 +569,7 @@ wk_sbufacquire(wk *paramweb)
569 569
                 memset(bb->bufs,0,sizeof(wk_buf)*BUFBLOCK);
570 570
                 bb->sizebufs=BUFBLOCK;
571 571
                 bb->usedbufs=0;
572
+                web->usedbufblocks++;
572 573
         }
573 574
         /* get first unused sbuf */
574 575
         for(j=0;j<bb->sizebufs;j+=8) {
... ...
@@ -659,7 +660,7 @@ wk_clientacquire(_wk *web)
659 660
         /* make sure there are free clientblocks */
660 661
         if(web->usedclientblocks==web->sizeclientblocks) {
661 662
                 wk_clientblock *newcb;
662
-                if((newcb=(wk_clientblock *)realloc(web->clientblocks,web->sizeclientblocks+CLIENTBLOCKBLOCK))==NULL)
663
+                if((newcb=(wk_clientblock *)realloc(web->clientblocks,(web->sizeclientblocks+CLIENTBLOCKBLOCK)*sizeof(wk_clientblock)))==NULL)
663 664
                         return(NULL); /* insufficient memory */
664 665
                 web->clientblocks=newcb;
665 666
                 memset(web->clientblocks+web->sizeclientblocks,0,CLIENTBLOCKBLOCK*sizeof(wk_clientblock));
... ...
@@ -680,6 +681,7 @@ wk_clientacquire(_wk *web)
680 681
                 memset(cb->clients,0,sizeof(wk_client)*CLIENTBLOCK);
681 682
                 cb->sizeclients=CLIENTBLOCK;
682 683
                 cb->usedclients=0;
684
+                web->usedclientblocks++;
683 685
         }
684 686
         /* get first unused client */
685 687
         for(j=0;j<cb->sizeclients;j+=8) {
... ...
@@ -762,8 +764,8 @@ str_findfirstempty(char *ptr, int size)
762 764
 {
763 765
         int i;
764 766
         for(i=0;i<(size-3);i++) {
765
-                if(ptr[0]=='\r' && ptr[1]=='\n' && ptr[2]=='\r' && ptr[3]=='\n')
766
-                        return(ptr);
767
+                if(ptr[i+0]=='\r' && ptr[i+1]=='\n' && ptr[i+2]=='\r' && ptr[i+3]=='\n')
768
+                        return(ptr+i);
767 769
         }
768 770
         return(NULL);
769 771
 }
... ...
@@ -819,7 +821,7 @@ wk_clientserviceread(_wk *web, wk_client *client)
819 821
         sbuf_add(hbuf,ptr,strlen(ptr)+1);
820 822
         ptr+=strlen(ptr)+1;
821 823
         /* protocol */
822
-        uri->path=sbuf_ptrunused(hbuf);
824
+        uri->protocol=sbuf_ptrunused(hbuf);
823 825
         sbuf_add(hbuf,ptr,strlen(ptr)+1);
824 826
         ptr+=strlen(ptr)+1;
825 827
         /* headers */