If we don't, we can wind up with a wedged cpuworker, and write to it
for ages and ages.
Found by skruffy. This was a bug in
2dda97e8fd898757, a.k.a. svn
revision 402. It's been there since we have been using cpuworkers.
--- /dev/null
+ o Minor bugfixes:
+ - Check return code on spawn_func() in cpuworker code, so that we don't
+ think we've spawned a nonworking cpuworker and write junk to it
+ forever. Fix for bug 4345; bugfix on all released Tor versions.
+ Found by "skruffy".
+
tor_assert(SOCKET_OK(fdarray[1]));
fd = fdarray[0];
- spawn_func(cpuworker_main, (void*)fdarray);
+ if (spawn_func(cpuworker_main, (void*)fdarray) < 0) {
+ tor_close_socket(fdarray[0]);
+ tor_close_socket(fdarray[1]);
+ tor_free(fdarray);
+ return -1;
+ }
log_debug(LD_OR,"just spawned a cpu worker.");
#ifndef TOR_IS_MULTITHREADED
tor_close_socket(fdarray[1]); /* don't need the worker's side of the pipe */