Commit a8227a5a200f1bb52ecd0f1a96b24d2e2dbf39f5
1 parent
5d47e372
Cosmetics
Avoid repeated creation/initalization/destruction of attr and calls to getpid git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6633 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
13 additions
and
11 deletions
posix-aio-compat.c
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; |
| 26 | 26 | static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; |
| 27 | 27 | static pthread_t thread_id; |
| 28 | +static pthread_attr_t attr; | |
| 28 | 29 | static int max_threads = 64; |
| 29 | 30 | static int cur_threads = 0; |
| 30 | 31 | static int idle_threads = 0; |
| ... | ... | @@ -76,8 +77,11 @@ static void thread_create(pthread_t *thread, pthread_attr_t *attr, |
| 76 | 77 | |
| 77 | 78 | static void *aio_thread(void *unused) |
| 78 | 79 | { |
| 80 | + pid_t pid; | |
| 79 | 81 | sigset_t set; |
| 80 | 82 | |
| 83 | + pid = getpid(); | |
| 84 | + | |
| 81 | 85 | /* block all signals */ |
| 82 | 86 | if (sigfillset(&set)) die("sigfillset"); |
| 83 | 87 | if (sigprocmask(SIG_BLOCK, &set, NULL)) die("sigprocmask"); |
| ... | ... | @@ -142,7 +146,7 @@ static void *aio_thread(void *unused) |
| 142 | 146 | idle_threads++; |
| 143 | 147 | mutex_unlock(&lock); |
| 144 | 148 | |
| 145 | - if (kill(getpid(), aiocb->ev_signo)) die("kill failed"); | |
| 149 | + if (kill(pid, aiocb->ev_signo)) die("kill failed"); | |
| 146 | 150 | } |
| 147 | 151 | |
| 148 | 152 | idle_threads--; |
| ... | ... | @@ -154,23 +158,21 @@ static void *aio_thread(void *unused) |
| 154 | 158 | |
| 155 | 159 | static void spawn_thread(void) |
| 156 | 160 | { |
| 157 | - int ret; | |
| 158 | - pthread_attr_t attr; | |
| 159 | - | |
| 160 | 161 | cur_threads++; |
| 161 | 162 | idle_threads++; |
| 162 | - | |
| 163 | - ret = pthread_attr_init(&attr); | |
| 164 | - if (ret) die2 (ret, "pthread_attr_init"); | |
| 165 | - ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); | |
| 166 | - if (ret) die2 (ret, "pthread_attr_setdetachstate"); | |
| 167 | 163 | thread_create(&thread_id, &attr, aio_thread, NULL); |
| 168 | - ret = pthread_attr_destroy(&attr); | |
| 169 | - if (ret) die2 (ret, "pthread_attr_destroy"); | |
| 170 | 164 | } |
| 171 | 165 | |
| 172 | 166 | int qemu_paio_init(struct qemu_paioinit *aioinit) |
| 173 | 167 | { |
| 168 | + int ret; | |
| 169 | + | |
| 170 | + ret = pthread_attr_init(&attr); | |
| 171 | + if (ret) die2(ret, "pthread_attr_init"); | |
| 172 | + | |
| 173 | + ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); | |
| 174 | + if (ret) die2(ret, "pthread_attr_setdetachstate"); | |
| 175 | + | |
| 174 | 176 | TAILQ_INIT(&request_list); |
| 175 | 177 | |
| 176 | 178 | return 0; | ... | ... |