Changeset 5695:dd52b51afdfb in roaraudio
- Timestamp:
- 10/13/12 23:28:54 (12 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/scheduler.c
r5694 r5695 164 164 } 165 165 166 static int __run_waits(struct roar_scheduler * sched) { 167 struct roar_scheduler_source * cur; 168 size_t i; 169 int ret = -1; 170 171 for (i = 0; ret == -1 && i < sched->sources_len; i++) { 172 if ( (cur = sched->sources[i]) == NULL ) 173 continue; 174 switch (cur->type) { 175 case ROAR_SCHEDULER_PLUGIN: 176 ret = roar_dl_appsched_trigger(cur->lhandle, ROAR_DL_APPSCHED_WAIT); 177 break; 178 case ROAR_SCHEDULER_PLUGINCONTAINER: 179 ret = roar_plugincontainer_appsched_trigger(cur->handle.container, ROAR_DL_APPSCHED_WAIT); 180 break; 181 #ifndef DEBUG 182 default: /* noop */ break; 183 #endif 184 } 185 } 186 187 return ret; 188 } 189 166 190 // what to do?: 167 191 // 0. get all VIOs. … … 171 195 // 4. send UPDATE to all plugins and containers. 172 196 int roar_scheduler_iterate(struct roar_scheduler * sched) { 197 enum roar_scheduler_strategy strategy; 173 198 struct roar_vio_selecttv timeout = {8, 0}; // default: 8 sec. Just a random value. 174 199 struct roar_scheduler_source * cur, * new_client; … … 178 203 size_t i; 179 204 int have_timeout = 0; 180 size_t todo = 0 ;205 size_t todo = 0, vios = 0; 181 206 int tmp; 182 207 183 208 _CHKSCHED(0); 209 210 strategy = sched->strategy; 211 if ( strategy == ROAR_SCHEDULER_STRATEGY_DEFAULT ) 212 strategy = ROAR_SCHEDULER_STRATEGY_SELECTORWAIT; 184 213 185 214 if ( sched->vios == NULL || sched->vios_len < sched->sources_len ) { … … 210 239 ROAR_VIO_SELECT_SETVIO(&(sched->vios[i]), cur->vio, cur->handle.eventsq); 211 240 todo++; 241 vios++; 212 242 break; 213 243 case ROAR_SCHEDULER_TIMEOUT: … … 219 249 ROAR_VIO_SELECT_SETVIO(&(sched->vios[i]), cur->vio, ROAR_VIO_SELECT_READ); 220 250 todo++; 251 vios++; 221 252 break; 222 253 case ROAR_SCHEDULER_CPI_CLIENT: … … 244 275 ROAR_VIO_SELECT_SETVIO(&(sched->vios[i]), sched->sources[i]->vio, tmp); 245 276 todo++; 277 vios++; 246 278 break; 247 279 case ROAR_SCHEDULER_PLUGIN: … … 260 292 } 261 293 262 ret = roar_vio_select(sched->vios, sched->vios_len, &timeout, NULL); 294 if ( strategy == ROAR_SCHEDULER_STRATEGY_WAITORSELECT || strategy == ROAR_SCHEDULER_STRATEGY_WAIT ) { 295 ret = __run_waits(sched); 296 if ( ret == 0 || strategy == ROAR_SCHEDULER_STRATEGY_WAIT ) 297 ret = 1; 298 } else { 299 ret = -1; 300 } 301 302 if ( ret == -1 && !(strategy == ROAR_SCHEDULER_STRATEGY_SELECTORWAIT && vios == 0) ) { 303 ret = roar_vio_select(sched->vios, sched->vios_len, &timeout, NULL); 304 } 305 306 if ( ret < 0 && strategy == ROAR_SCHEDULER_STRATEGY_SELECTORWAIT ) { 307 ret = __run_waits(sched); 308 if ( ret == 0 ) 309 ret = 1; 310 } 311 263 312 if ( ret == -1 ) 264 313 return -1;
Note: See TracChangeset
for help on using the changeset viewer.