| 103 | } |
| 104 | |
| 105 | av_cold int ff_pthread_init(void *obj, const unsigned offsets[]) |
| 106 | { |
| 107 | const unsigned *cur_offset = offsets; |
| 108 | unsigned cnt = 0; |
| 109 | int err; |
| 110 | |
| 111 | #define PTHREAD_INIT_LOOP(type) \ |
| 112 | for (; *(++cur_offset) != THREAD_SENTINEL; cnt++) { \ |
| 113 | pthread_ ## type ## _t *dst = (void*)((char*)obj + *cur_offset); \ |
| 114 | err = pthread_ ## type ## _init(dst, NULL); \ |
| 115 | if (err) { \ |
| 116 | err = AVERROR(err); \ |
| 117 | goto fail; \ |
| 118 | } \ |
| 119 | } |
| 120 | PTHREAD_INIT_LOOP(mutex) |
| 121 | PTHREAD_INIT_LOOP(cond) |
| 122 | |
| 123 | fail: |
| 124 | *(unsigned*)((char*)obj + offsets[0]) = cnt; |
| 125 | return err; |
| 126 | } |
no outgoing calls
no test coverage detected