Changeset 1260:9d5611d31291 in roaraudio
- Timestamp:
- 02/27/09 03:27:53 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/vio_cmd.c
r1257 r1260 42 42 return -1; 43 43 44 /* 44 45 if ( flags == 0 ) 45 46 return -1; 47 */ 46 48 47 49 if ( reader == NULL && writer == NULL ) … … 50 52 if ( (state = malloc(sizeof(struct roar_vio_cmd_state))) == NULL ) 51 53 return -1; 54 55 ROAR_DBG("roar_vio_open_cmd(*): pre reqs are OK"); 52 56 53 57 // clear all … … 76 80 77 81 // init calls 78 calls->inst = (void*) state; 82 calls->close = roar_vio_cmd_close; 83 calls->read = roar_vio_cmd_read; 84 calls->write = roar_vio_cmd_write; 85 calls->nonblock = roar_vio_cmd_nonblock; 86 calls->sync = roar_vio_cmd_sync; 87 calls->inst = (void*) state; 88 89 ROAR_DBG("roar_vio_open_cmd(*): var setup OK"); 79 90 80 91 if ( !(options & ROAR_VIO_CMD_OPTS_ON_DEMAND) ) { … … 206 217 size_t tlen = 0; 207 218 219 ROAR_DBG("roar_vio_cmd_read(*) = ?"); 220 208 221 if ( !state->reader.opened ) { 209 222 if ( buf == NULL && count == 0 ) /* sync: no need to do anything if no reader is forked :) */ … … 230 243 231 244 FD_SET(state->reader.in, rfhs); 232 FD_SET(state->reader.out, wfhs); 245 246 if ( state->reader.out != -1 ) { 247 FD_SET(state->reader.out, wfhs); 248 } 249 250 #ifdef DEBUG 251 if ( FD_ISSET(state->reader.in, rfhs) ) { 252 ROAR_DBG("roar_vio_cmd_read(*): reader set in fh group"); 253 } 254 #endif 233 255 234 256 max_fh = state->reader.in > state->reader.out ? state->reader.in : state->reader.out; 235 236 if ( (ret = select(max_fh + 1, rfhs, wfhs, rfhs, &tv)) == -1 ) 237 return -1; 257 ROAR_DBG("roar_vio_cmd_read(*): max_fh=%i", max_fh); 258 259 if ( (ret = select(max_fh + 1, rfhs, wfhs, NULL, &tv)) == -1 ) 260 return -1; 261 262 ROAR_DBG("roar_vio_cmd_read(*): select(*) = %i", ret); 263 ROAR_DBG("roar_vio_cmd_read(*): reader=%i, writer=%i", state->reader.in, state->reader.out); 238 264 239 265 if ( ret > 0 ) { 240 266 if ( FD_ISSET(state->reader.in, rfhs) ) { 267 ROAR_DBG("roar_vio_cmd_read(*): event on reader"); 268 241 269 if ( (ret = read(state->reader.in, buf+done, count-done)) == -1 ) 242 270 break; … … 248 276 } 249 277 250 if ( FD_ISSET(state->reader.out, wfhs) ) { 278 if ( state->reader.out != -1 && FD_ISSET(state->reader.out, wfhs) ) { 279 ROAR_DBG("roar_vio_cmd_read(*): event on writer"); 280 251 281 if ( !tlen ) { 252 tp = tbuf; 282 tp = tbuf; 283 tlen = 0; 253 284 if ( (tlen = roar_vio_read(state->next, tp, ROAR_VIO_CMD_BUFSIZE)) == -1 ) 254 tlen = 0;285 continue; 255 286 } 256 287 … … 260 291 tp += ret; 261 292 } 293 } else { 294 close(state->reader.out); 295 state->reader.out = -1; 262 296 } 263 297 }
Note: See TracChangeset
for help on using the changeset viewer.