trunk/src/osd/windows/winwork.c
| r32096 | r32097 | |
| 159 | 159 | TCHAR *osdworkqueuemaxthreads = _tgetenv(_T("OSDWORKQUEUEMAXTHREADS")); |
| 160 | 160 | |
| 161 | 161 | // allocate a new queue |
| 162 | | queue = (osd_work_queue *)malloc(sizeof(*queue)); |
| 162 | queue = (osd_work_queue *)osd_malloc(sizeof(*queue)); |
| 163 | 163 | if (queue == NULL) |
| 164 | 164 | goto error; |
| 165 | 165 | memset(queue, 0, sizeof(*queue)); |
| r32096 | r32097 | |
| 199 | 199 | queue->threads = MIN(queue->threads, WORK_MAX_THREADS); |
| 200 | 200 | |
| 201 | 201 | // allocate memory for thread array (+1 to count the calling thread) |
| 202 | | queue->thread = (work_thread_info *)malloc((queue->threads + 1) * sizeof(queue->thread[0])); |
| 202 | queue->thread = (work_thread_info *)osd_malloc_array((queue->threads + 1) * sizeof(queue->thread[0])); |
| 203 | 203 | if (queue->thread == NULL) |
| 204 | 204 | goto error; |
| 205 | 205 | memset(queue->thread, 0, (queue->threads + 1) * sizeof(queue->thread[0])); |
| r32096 | r32097 | |
| 364 | 364 | |
| 365 | 365 | // free the list |
| 366 | 366 | if (queue->thread != NULL) |
| 367 | | free(queue->thread); |
| 367 | osd_free(queue->thread); |
| 368 | 368 | |
| 369 | 369 | // free all the events |
| 370 | 370 | if (queue->doneevent != NULL) |
| r32096 | r32097 | |
| 377 | 377 | queue->free = item->next; |
| 378 | 378 | if (item->event != NULL) |
| 379 | 379 | CloseHandle(item->event); |
| 380 | | free(item); |
| 380 | osd_free(item); |
| 381 | 381 | } |
| 382 | 382 | |
| 383 | 383 | // free all items in the active list |
| r32096 | r32097 | |
| 387 | 387 | queue->list = item->next; |
| 388 | 388 | if (item->event != NULL) |
| 389 | 389 | CloseHandle(item->event); |
| 390 | | free(item); |
| 390 | osd_free(item); |
| 391 | 391 | } |
| 392 | 392 | |
| 393 | 393 | #if KEEP_STATISTICS |
| r32096 | r32097 | |
| 399 | 399 | |
| 400 | 400 | osd_scalable_lock_free(queue->lock); |
| 401 | 401 | // free the queue itself |
| 402 | | free(queue); |
| 402 | osd_free(queue); |
| 403 | 403 | } |
| 404 | 404 | |
| 405 | 405 | |
| r32096 | r32097 | |
| 429 | 429 | if (item == NULL) |
| 430 | 430 | { |
| 431 | 431 | // allocate the item |
| 432 | | item = (osd_work_item *)malloc(sizeof(*item)); |
| 432 | item = (osd_work_item *)osd_malloc(sizeof(*item)); |
| 433 | 433 | if (item == NULL) |
| 434 | 434 | return NULL; |
| 435 | 435 | item->event = NULL; |