X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fos_priority.c;h=5946f2b3d4b32ae4ad256a0859bb64631c906742;hb=72c8645af31896829b674b575c5375706f362a30;hp=b8b8549634ae66e3ad9bb4037637257c832db22d;hpb=81f50d19d6309556f1f47331c22d8e08e512601d;p=oweals%2Fgnunet.git diff --git a/src/util/os_priority.c b/src/util/os_priority.c index b8b854963..5946f2b3d 100644 --- a/src/util/os_priority.c +++ b/src/util/os_priority.c @@ -343,112 +343,6 @@ child_wait_thread (void *arg) #endif -/** - * Set process priority - * - * @param proc pointer to process structure - * @param prio priority value - * @return GNUNET_OK on success, GNUNET_SYSERR on error - */ -int -GNUNET_OS_set_process_priority (struct GNUNET_OS_Process *proc, - enum GNUNET_SCHEDULER_Priority prio) -{ - int rprio; - - GNUNET_assert (prio < GNUNET_SCHEDULER_PRIORITY_COUNT); - if (GNUNET_SCHEDULER_PRIORITY_KEEP == prio) - return GNUNET_OK; - - /* convert to MINGW/Unix values */ - switch (prio) - { - case GNUNET_SCHEDULER_PRIORITY_UI: - case GNUNET_SCHEDULER_PRIORITY_URGENT: -#ifdef MINGW - rprio = HIGH_PRIORITY_CLASS; -#else - rprio = 0; -#endif - break; - - case GNUNET_SCHEDULER_PRIORITY_HIGH: -#ifdef MINGW - rprio = ABOVE_NORMAL_PRIORITY_CLASS; -#else - rprio = 5; -#endif - break; - - case GNUNET_SCHEDULER_PRIORITY_DEFAULT: -#ifdef MINGW - rprio = NORMAL_PRIORITY_CLASS; -#else - rprio = 7; -#endif - break; - - case GNUNET_SCHEDULER_PRIORITY_BACKGROUND: -#ifdef MINGW - rprio = BELOW_NORMAL_PRIORITY_CLASS; -#else - rprio = 10; -#endif - break; - - case GNUNET_SCHEDULER_PRIORITY_IDLE: -#ifdef MINGW - rprio = IDLE_PRIORITY_CLASS; -#else - rprio = 19; -#endif - break; - default: - GNUNET_assert (0); - return GNUNET_SYSERR; - } - - /* Set process priority */ -#ifdef MINGW - { - HANDLE h = proc->handle; - - GNUNET_assert (h != NULL); - SetPriorityClass (h, rprio); - } -#elif LINUX - pid_t pid; - - pid = proc->pid; - if ((0 == pid) || (pid == getpid ())) - { - int have = nice (0); - int delta = rprio - have; - - errno = 0; - if ((delta != 0) && (rprio == nice (delta)) && (errno != 0)) - { - LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, "nice"); - return GNUNET_SYSERR; - } - } - else - { - if (0 != setpriority (PRIO_PROCESS, pid, rprio)) - { - LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, - "setpriority"); - return GNUNET_SYSERR; - } - } -#else - LOG (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK, - "Priority management not availabe for this platform\n"); -#endif - return GNUNET_OK; -} - - #if MINGW static char * CreateCustomEnvTable (char **vars) @@ -634,12 +528,13 @@ start_process (int pipe_control, int fd_stdin_read; int fd_stdin_write; - if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename)) + if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename, GNUNET_NO, NULL)) return NULL; /* not executable */ if (GNUNET_YES == pipe_control) { struct GNUNET_DISK_PipeHandle *childpipe; int dup_childpipe_read_fd = -1; + childpipe = GNUNET_DISK_pipe (GNUNET_NO, GNUNET_NO, GNUNET_YES, GNUNET_NO); if (NULL == childpipe) return NULL; @@ -651,9 +546,9 @@ start_process (int pipe_control, &childpipe_read_fd, sizeof (int))) || (-1 == (dup_childpipe_read_fd = dup (childpipe_read_fd)))) { - if (childpipe_read) + if (NULL != childpipe_read) GNUNET_DISK_file_close (childpipe_read); - if (childpipe_write) + if (NULL != childpipe_write) GNUNET_DISK_file_close (childpipe_write); if (0 <= dup_childpipe_read_fd) close (dup_childpipe_read_fd); @@ -664,7 +559,6 @@ start_process (int pipe_control, } else { - childpipe_read = NULL; childpipe_write = NULL; childpipe_read_fd = -1; } @@ -711,9 +605,7 @@ start_process (int pipe_control, int eno = errno; LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "fork"); GNUNET_array_grow (lscp, ls, 0); - if (childpipe_read) - GNUNET_DISK_file_close (childpipe_read); - if (childpipe_write) + if (NULL != childpipe_write) GNUNET_DISK_file_close (childpipe_write); if (0 <= childpipe_read_fd) close (childpipe_read_fd); @@ -722,6 +614,7 @@ start_process (int pipe_control, } if (0 != ret) { + unsetenv (GNUNET_OS_CONTROL_PIPE); gnunet_proc = GNUNET_malloc (sizeof (struct GNUNET_OS_Process)); gnunet_proc->pid = ret; gnunet_proc->control_pipe = childpipe_write; @@ -865,7 +758,7 @@ start_process (int pipe_control, BOOL bresult; DWORD error_code; - if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename)) + if (GNUNET_SYSERR == GNUNET_OS_check_helper_binary (filename, GNUNET_NO, NULL)) return NULL; /* not executable */ /* Search in prefix dir (hopefully - the directory from which @@ -1162,7 +1055,7 @@ start_process (int pipe_control, return NULL; } - bresult = CreateProcessW (wpath, wcmd, NULL, NULL, TRUE, + bresult = CreateProcessW (wpath, wcmd, NULL, NULL, GNUNET_YES, DETACHED_PROCESS | CREATE_SUSPENDED, env_block, NULL, &start, &proc); error_code = GetLastError ();