ry / ebb fork watch download tarball
public this repo is viewable by everyone
Description: web server
Homepage: http://ebb.rubyforge.org
Clone URL: git://github.com/ry/ebb.git
Deoptimize by freeing client->response_buffer

This should improve memory usage slightly but might slow down things due 
to
the increased allocations. A quick benchmark shows imperceptible 
performance
decrease.
ryah (author)
about 1 month ago
commit  f16270d317fca555c68a294db72a0db1d4767dee
tree    8f42dfae9f83549ad87b236c4d0df1d83f974ef7
parent  7393e3658c5b1bc422047df6bf40e0f08568af37
...
350
351
352
353
354
355
356
357
 
 
 
 
 
358
359
360
...
432
433
434
435
 
436
437
438
...
454
455
456
457
458
459
460
461
462
...
582
583
584
 
 
 
585
586
587
...
350
351
352
 
 
 
 
 
353
354
355
356
357
358
359
360
...
432
433
434
 
435
436
437
438
...
454
455
456
 
 
 
457
458
459
...
579
580
581
582
583
584
585
586
587
0
@@ -350,11 +350,11 @@ static void client_init(ebb_client *client)
0
   client->keep_alive = FALSE;
0
   client->status_written = client->headers_written = client->body_written = FALSE;
0
   client->written = 0;
0
- /* here we do not free the already allocated GString client->response_buffer
0
- * that we're holding the response in. we reuse it again - presumably
0
- * because the backend is going to keep sending such long requests.
0
- */
0
- client->response_buffer->len = 0;
0
+
0
+ if(client->response_buffer != NULL)
0
+ g_string_free(client->response_buffer, TRUE);
0
+ client->response_buffer = g_string_new("");
0
+
0
   client->upload_filename = NULL;
0
   
0
   /* SETUP READ AND TIMEOUT WATCHERS */
0
@@ -432,7 +432,7 @@ void ebb_server_init( ebb_server *server
0
   int i;
0
   for(i=0; i < EBB_MAX_CLIENTS; i++) {
0
     server->clients[i].request_buffer = NULL;
0
- server->clients[i].response_buffer = g_string_new("");
0
+ server->clients[i].response_buffer = NULL;
0
     server->clients[i].open = FALSE;
0
     server->clients[i].in_use = FALSE;
0
     server->clients[i].server = server;
0
@@ -454,9 +454,6 @@ void ebb_server_free(ebb_server *server)
0
 {
0
   ebb_server_unlisten(server);
0
   
0
- int i;
0
- for(i=0; i < EBB_MAX_CLIENTS; i++)
0
- g_string_free(server->clients[i].response_buffer, TRUE);
0
   if(server->port)
0
     free(server->port);
0
   if(server->socketpath)
0
@@ -582,6 +579,9 @@ void ebb_client_close(ebb_client *client)
0
     }
0
     client->ip = NULL;
0
     
0
+ g_string_free(client->response_buffer, TRUE);
0
+ client->response_buffer = NULL;
0
+
0
     close(client->fd);
0
     client->open = FALSE;
0
   }

Comments

    No one has commented yet.