summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--opentracker.c43
2 files changed, 43 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 525b3cb..94b8e05 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
1CC?=gcc 1CC?=gcc
2FEATURES=#-DWANT_IP_FROM_QUERY_STRING -DWANT_BLACKLIST -DWANT_CLOSED_TRACKER 2FEATURES=#-D_DEBUG_FDS -DWANT_IP_FROM_QUERY_STRING -DWANT_BLACKLIST -DWANT_CLOSED_TRACKER
3#DEBUG_OPTS=-g -ggdb -pg # -fprofile-arcs -ftest-coverage 3#DEBUG_OPTS=-g -ggdb -pg # -fprofile-arcs -ftest-coverage
4DEBUG_OPTS=-s -Os 4DEBUG_OPTS=-s -Os
5CFLAGS+=-I../libowfat -Wall -pipe -m64 # -pedantic -ansi 5CFLAGS+=-I../libowfat -Wall -pipe -m64 # -pedantic -ansi
diff --git a/opentracker.c b/opentracker.c
index a6c57e7..374824f 100644
--- a/opentracker.c
+++ b/opentracker.c
@@ -35,6 +35,10 @@ static const size_t SUCCESS_HTTP_SIZE_OFF = 17;
35/* To always have space for error messages ;) */ 35/* To always have space for error messages ;) */
36static char static_scratch[8192]; 36static char static_scratch[8192];
37 37
38#ifdef _DEBUG_FDS
39static char fd_debug_space[0x10000];
40#endif
41
38static void carp(const char* routine) { 42static void carp(const char* routine) {
39 buffer_puts(buffer_2,routine); 43 buffer_puts(buffer_2,routine);
40 buffer_puts(buffer_2,": "); 44 buffer_puts(buffer_2,": ");
@@ -70,10 +74,18 @@ void senddata(int64 s, struct http_data* h, char *buffer, size_t size ) {
70 if( h ) array_reset(&h->r); 74 if( h ) array_reset(&h->r);
71 written_size = write( s, buffer, size ); 75 written_size = write( s, buffer, size );
72 if( ( written_size < 0 ) || ( written_size == size ) ) { 76 if( ( written_size < 0 ) || ( written_size == size ) ) {
77#ifdef _DEBUG_FDS
78 if( !fd_debug_space[s] ) fprintf( stderr, "close on non-open fd\n" );
79 fd_debug_space[s] = 0;
80#endif
73 free(h); io_close( s ); 81 free(h); io_close( s );
74 } else { 82 } else {
75 /* here we would take a copy of the buffer and remember it */ 83 /* here we would take a copy of the buffer and remember it */
76 fprintf( stderr, "Should have handled this.\n" ); 84 fprintf( stderr, "Should have handled this.\n" );
85#ifdef _DEBUG_FDS
86 if( !fd_debug_space[s] ) fprintf( stderr, "close on non-open fd\n" );
87 fd_debug_space[s] = 0;
88#endif
77 free(h); io_close( s ); 89 free(h); io_close( s );
78 } 90 }
79} 91}
@@ -337,6 +349,10 @@ e404:
337 senddata( s, h, static_scratch + reply_off, reply_size ); 349 senddata( s, h, static_scratch + reply_off, reply_size );
338 } else { 350 } else {
339 if( h ) array_reset(&h->r); 351 if( h ) array_reset(&h->r);
352#ifdef _DEBUG_FDS
353 if( !fd_debug_space[s] ) fprintf( stderr, "close on non-open fd\n" );
354 fd_debug_space[s] = 0;
355#endif
340 free( h ); io_close( s ); 356 free( h ); io_close( s );
341 } 357 }
342} 358}
@@ -349,6 +365,15 @@ void graceful( int s ) {
349 } 365 }
350} 366}
351 367
368#ifdef _DEBUG_FDS
369void count_fds( int s ) {
370 int i, count = 0;
371 for( i=0; i<sizeof(fd_debug_space); ++i )
372 if( fd_debug_space[i] ) ++count;
373 fprintf( stderr, "Open fds here: %i\n", count );
374}
375#endif
376
352void usage( char *name ) { 377void usage( char *name ) {
353 fprintf( stderr, "Usage: %s [-i serverip] [-p serverport] [-d serverdirectory]" 378 fprintf( stderr, "Usage: %s [-i serverip] [-p serverport] [-d serverdirectory]"
354#ifdef WANT_CLOSED_TRACKER 379#ifdef WANT_CLOSED_TRACKER
@@ -394,6 +419,10 @@ void handle_read( int64 clientsocket ) {
394 array_reset(&h->r); 419 array_reset(&h->r);
395 free(h); 420 free(h);
396 } 421 }
422#ifdef _DEBUG_FDS
423 if( !fd_debug_space[clientsocket] ) fprintf( stderr, "close on non-open fd\n" );
424 fd_debug_space[clientsocket] = 0;
425#endif
397 io_close(clientsocket); 426 io_close(clientsocket);
398 return; 427 return;
399 } 428 }
@@ -423,6 +452,11 @@ void handle_accept( int64 serversocket ) {
423 continue; 452 continue;
424 } 453 }
425 454
455#ifdef _DEBUG_FDS
456 if( fd_debug_space[i] ) fprintf( stderr, "double use of fd: %i\n", (int)i );
457 fd_debug_space[i] = 1;
458#endif
459
426 io_wantread( i ); 460 io_wantread( i );
427 461
428 byte_zero(h,sizeof(struct http_data)); 462 byte_zero(h,sizeof(struct http_data));
@@ -448,6 +482,10 @@ void handle_timeouted( ) {
448 array_reset( &h->r ); 482 array_reset( &h->r );
449 free( h ); 483 free( h );
450 } 484 }
485#ifdef _DEBUG_FDS
486 if( !fd_debug_space[i] ) fprintf( stderr, "close on non-open fd\n" );
487 fd_debug_space[i] = 0;
488#endif
451 io_close(i); 489 io_close(i);
452 } 490 }
453} 491}
@@ -521,7 +559,10 @@ int main( int argc, char **argv ) {
521 panic("io_fd"); 559 panic("io_fd");
522 560
523 signal( SIGPIPE, SIG_IGN ); 561 signal( SIGPIPE, SIG_IGN );
524 signal( SIGINT, graceful ); 562 signal( SIGINT, graceful );
563#ifdef _DEBUG_FDS
564 signal( SIGINFO, count_fds );
565#endif
525 if( init_logic( serverdir ) == -1 ) 566 if( init_logic( serverdir ) == -1 )
526 panic("Logic not started"); 567 panic("Logic not started");
527 568