Changeset 498:0c066d1a1842 in roaraudio


Ignore:
Timestamp:
08/14/08 06:06:02 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added simple code to speed up non-stream connections

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/roaraudio/proto.h

    r465 r498  
    5050 
    5151 
     52#define ROAR_CMD_OK_STOP      253 
    5253#define ROAR_CMD_OK           254 /* return value OK */ 
    5354#define ROAR_CMD_ERROR        255 /* return value ERROR */ 
  • roard/clients.c

    r439 r498  
    130130} 
    131131 
     132#define MAX_STREAMLESS 8 
     133 
    132134int clients_check_all (void) { 
    133135 struct timeval tv; 
     
    138140 int max_fh = -1; 
    139141 int have = 0; 
     142 struct { 
     143  int id; 
     144  int fh; 
     145 } streamless[MAX_STREAMLESS]; 
     146 int have_streamless = 0; 
     147 int have_stream; 
    140148 
    141149 FD_ZERO(&r); 
     
    158166    max_fh = fh; 
    159167  } 
     168 
     169  have_stream = 0; 
    160170 
    161171  for (j = 0; j < ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT; j++) { 
     
    165175    if ( fh > max_fh ) 
    166176     max_fh = fh; 
     177 
     178    have_stream = 1; 
    167179   } 
    168180   //printf("D: client=%i, stream=%i, fh=%i\n", i, j, fh); 
    169181  } 
    170182 
     183  if ( !have_stream && have_streamless < MAX_STREAMLESS ) { 
     184   streamless[have_streamless  ].id = i; 
     185   if ( (streamless[have_streamless++].fh = g_clients[i]->fh) == -1 ) 
     186    have_streamless--; 
     187  } 
    171188 } 
    172189 
     
    214231 } 
    215232 
     233 if ( have_streamless ) { 
     234   FD_ZERO(&r); 
     235 
     236   tv.tv_sec  = 0; 
     237   tv.tv_usec = 1; 
     238 
     239   max_fh = -1; 
     240 
     241   for (i = 0; i < have_streamless; i++) { 
     242    fh = streamless[i].fh; 
     243 
     244    ROAR_DBG("clients_check_all(void): fh=%i", fh); 
     245    FD_SET(fh, &r); 
     246 
     247    if ( fh > max_fh ) 
     248     max_fh = fh; 
     249   } 
     250 
     251   if ( (ret = select(max_fh + 1, &r, NULL, NULL, &tv)) < 0 ) { 
     252    return ret; 
     253   } 
     254 
     255   for (i = 0; i < have_streamless; i++) { 
     256    if ( FD_ISSET(streamless[i].fh, &r) ) { 
     257     clients_check(streamless[i].id); 
     258    } 
     259   } 
     260 } 
     261 
    216262 ROAR_DBG("clients_check_all(void) = %i // have value", have); 
    217263 return have; 
     
    224270 int oldcmd; 
    225271 int r; 
     272 int rv = 0; 
    226273 
    227274 if ( g_clients[id] == NULL ) 
     
    251298   m.cmd     = ROAR_CMD_OK; 
    252299   m.datalen = 0; 
     300  } else if ( m.cmd == ROAR_CMD_OK_STOP ) { 
     301   m.cmd     = ROAR_CMD_OK; 
     302   rv        = 1; 
    253303  } 
    254304 } 
     
    260310 
    261311 ROAR_DBG("clients_check(id=%i) = 0", id); 
    262  return 0; 
     312 return rv; 
    263313} 
    264314 
  • roard/req.c

    r496 r498  
    591591 } 
    592592 
    593  mes->cmd     = ROAR_CMD_OK; 
     593 mes->cmd     = ROAR_CMD_OK_STOP; 
    594594 mes->datalen = 0; 
    595595 
Note: See TracChangeset for help on using the changeset viewer.