uv: Upgrade to a9f6f06
This commit is contained in:
parent
c383befd25
commit
7397ab2cf1
4
deps/uv/config-unix.mk
vendored
4
deps/uv/config-unix.mk
vendored
@ -128,6 +128,10 @@ else
|
|||||||
RUNNER_LINKFLAGS += -pthread
|
RUNNER_LINKFLAGS += -pthread
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq (FreeBSD,$(uname_S))
|
||||||
|
OBJS += src/unix/proctitle.o
|
||||||
|
endif
|
||||||
|
|
||||||
RUNNER_LIBS=
|
RUNNER_LIBS=
|
||||||
RUNNER_SRC=test/runner-unix.c
|
RUNNER_SRC=test/runner-unix.c
|
||||||
|
|
||||||
|
13
deps/uv/include/uv-private/uv-unix.h
vendored
13
deps/uv/include/uv-private/uv-unix.h
vendored
@ -40,10 +40,17 @@
|
|||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
#include <semaphore.h>
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
# include <mach/mach.h>
|
||||||
|
# include <mach/task.h>
|
||||||
|
# include <mach/semaphore.h>
|
||||||
|
#else
|
||||||
|
# include <semaphore.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __sun
|
#if __sun
|
||||||
# include <sys/port.h>
|
# include <sys/port.h>
|
||||||
# include <port.h>
|
# include <port.h>
|
||||||
@ -67,7 +74,11 @@ typedef pthread_once_t uv_once_t;
|
|||||||
typedef pthread_t uv_thread_t;
|
typedef pthread_t uv_thread_t;
|
||||||
typedef pthread_mutex_t uv_mutex_t;
|
typedef pthread_mutex_t uv_mutex_t;
|
||||||
typedef pthread_rwlock_t uv_rwlock_t;
|
typedef pthread_rwlock_t uv_rwlock_t;
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
typedef semaphore_t uv_sem_t;
|
||||||
|
#else
|
||||||
typedef sem_t uv_sem_t;
|
typedef sem_t uv_sem_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Platform-specific definitions for uv_spawn support. */
|
/* Platform-specific definitions for uv_spawn support. */
|
||||||
typedef gid_t uv_gid_t;
|
typedef gid_t uv_gid_t;
|
||||||
|
27
deps/uv/src/unix/darwin.c
vendored
27
deps/uv/src/unix/darwin.c
vendored
@ -41,8 +41,6 @@
|
|||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#include <unistd.h> /* sysconf */
|
#include <unistd.h> /* sysconf */
|
||||||
|
|
||||||
static char *process_title;
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE
|
#if TARGET_OS_IPHONE
|
||||||
/* see: http://developer.apple.com/library/mac/#qa/qa1398/_index.html */
|
/* see: http://developer.apple.com/library/mac/#qa/qa1398/_index.html */
|
||||||
uint64_t uv_hrtime() {
|
uint64_t uv_hrtime() {
|
||||||
@ -138,31 +136,6 @@ void uv_loadavg(double avg[3]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char** uv_setup_args(int argc, char** argv) {
|
|
||||||
process_title = argc ? strdup(argv[0]) : NULL;
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_set_process_title(const char* title) {
|
|
||||||
/* TODO implement me */
|
|
||||||
return uv__new_artificial_error(UV_ENOSYS);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
|
||||||
if (process_title) {
|
|
||||||
strncpy(buffer, process_title, size);
|
|
||||||
} else {
|
|
||||||
if (size > 0) {
|
|
||||||
buffer[0] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||||
struct task_basic_info t_info;
|
struct task_basic_info t_info;
|
||||||
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
|
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
|
||||||
|
16
deps/uv/src/unix/freebsd.c
vendored
16
deps/uv/src/unix/freebsd.c
vendored
@ -139,9 +139,23 @@ char** uv_setup_args(int argc, char** argv) {
|
|||||||
|
|
||||||
|
|
||||||
uv_err_t uv_set_process_title(const char* title) {
|
uv_err_t uv_set_process_title(const char* title) {
|
||||||
|
int oid[4];
|
||||||
|
|
||||||
if (process_title) free(process_title);
|
if (process_title) free(process_title);
|
||||||
process_title = strdup(title);
|
process_title = strdup(title);
|
||||||
setproctitle(title);
|
|
||||||
|
oid[0] = CTL_KERN;
|
||||||
|
oid[1] = KERN_PROC;
|
||||||
|
oid[2] = KERN_PROC_ARGS;
|
||||||
|
oid[3] = getpid();
|
||||||
|
|
||||||
|
sysctl(oid,
|
||||||
|
ARRAY_SIZE(oid),
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
process_title,
|
||||||
|
strlen(process_title) + 1);
|
||||||
|
|
||||||
return uv_ok_;
|
return uv_ok_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
72
deps/uv/src/unix/linux/linux-core.c
vendored
72
deps/uv/src/unix/linux/linux-core.c
vendored
@ -58,11 +58,6 @@
|
|||||||
|
|
||||||
static char buf[MAXPATHLEN + 1];
|
static char buf[MAXPATHLEN + 1];
|
||||||
|
|
||||||
static struct {
|
|
||||||
char *str;
|
|
||||||
size_t len;
|
|
||||||
} process_title;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There's probably some way to get time from Linux than gettimeofday(). What
|
* There's probably some way to get time from Linux than gettimeofday(). What
|
||||||
@ -112,73 +107,6 @@ uint64_t uv_get_total_memory(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char** uv_setup_args(int argc, char** argv) {
|
|
||||||
char **new_argv;
|
|
||||||
char **new_env;
|
|
||||||
size_t size;
|
|
||||||
int envc;
|
|
||||||
char *s;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (envc = 0; environ[envc]; envc++);
|
|
||||||
|
|
||||||
s = envc ? environ[envc - 1] : argv[argc - 1];
|
|
||||||
|
|
||||||
process_title.str = argv[0];
|
|
||||||
process_title.len = s + strlen(s) + 1 - argv[0];
|
|
||||||
|
|
||||||
size = process_title.len;
|
|
||||||
size += (argc + 1) * sizeof(char **);
|
|
||||||
size += (envc + 1) * sizeof(char **);
|
|
||||||
|
|
||||||
if ((s = (char *) malloc(size)) == NULL) {
|
|
||||||
process_title.str = NULL;
|
|
||||||
process_title.len = 0;
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_argv = (char **) s;
|
|
||||||
new_env = new_argv + argc + 1;
|
|
||||||
s = (char *) (new_env + envc + 1);
|
|
||||||
memcpy(s, process_title.str, process_title.len);
|
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
|
||||||
new_argv[i] = s + (argv[i] - argv[0]);
|
|
||||||
new_argv[argc] = NULL;
|
|
||||||
|
|
||||||
s += environ[0] - argv[0];
|
|
||||||
|
|
||||||
for (i = 0; i < envc; i++)
|
|
||||||
new_env[i] = s + (environ[i] - environ[0]);
|
|
||||||
new_env[envc] = NULL;
|
|
||||||
|
|
||||||
environ = new_env;
|
|
||||||
return new_argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_set_process_title(const char* title) {
|
|
||||||
/* No need to terminate, last char is always '\0'. */
|
|
||||||
if (process_title.len)
|
|
||||||
strncpy(process_title.str, title, process_title.len - 1);
|
|
||||||
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
|
||||||
if (process_title.str) {
|
|
||||||
strncpy(buffer, process_title.str, size);
|
|
||||||
} else {
|
|
||||||
if (size > 0) {
|
|
||||||
buffer[0] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||||
FILE* f;
|
FILE* f;
|
||||||
int itmp;
|
int itmp;
|
||||||
|
30
deps/uv/src/unix/openbsd.c
vendored
30
deps/uv/src/unix/openbsd.c
vendored
@ -40,9 +40,6 @@
|
|||||||
#define NANOSEC ((uint64_t) 1e9)
|
#define NANOSEC ((uint64_t) 1e9)
|
||||||
|
|
||||||
|
|
||||||
static char *process_title;
|
|
||||||
|
|
||||||
|
|
||||||
uint64_t uv_hrtime(void) {
|
uint64_t uv_hrtime(void) {
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
@ -137,33 +134,6 @@ uint64_t uv_get_total_memory(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char** uv_setup_args(int argc, char** argv) {
|
|
||||||
process_title = argc ? strdup(argv[0]) : NULL;
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_set_process_title(const char* title) {
|
|
||||||
if (process_title) free(process_title);
|
|
||||||
process_title = strdup(title);
|
|
||||||
setproctitle(title);
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
|
||||||
if (process_title) {
|
|
||||||
strncpy(buffer, process_title, size);
|
|
||||||
} else {
|
|
||||||
if (size > 0) {
|
|
||||||
buffer[0] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||||
kvm_t *kd = NULL;
|
kvm_t *kd = NULL;
|
||||||
struct kinfo_proc *kinfo = NULL;
|
struct kinfo_proc *kinfo = NULL;
|
||||||
|
92
deps/uv/src/unix/proctitle.c
vendored
Normal file
92
deps/uv/src/unix/proctitle.c
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to
|
||||||
|
* deal in the Software without restriction, including without limitation the
|
||||||
|
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
* sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
* IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "uv.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
/* NOTE: FreeBSD is using it's own implementation of those functions */
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
char *str;
|
||||||
|
size_t len;
|
||||||
|
} process_title;
|
||||||
|
|
||||||
|
extern char** environ;
|
||||||
|
|
||||||
|
|
||||||
|
char** uv_setup_args(int argc, char** argv) {
|
||||||
|
char **new_argv;
|
||||||
|
char **new_env;
|
||||||
|
size_t size;
|
||||||
|
int envc;
|
||||||
|
char *s;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (envc = 0; environ[envc]; envc++);
|
||||||
|
|
||||||
|
s = envc ? environ[envc - 1] : argv[argc - 1];
|
||||||
|
|
||||||
|
process_title.str = argv[0];
|
||||||
|
process_title.len = s + strlen(s) + 1 - argv[0];
|
||||||
|
|
||||||
|
size = process_title.len;
|
||||||
|
size += (argc + 1) * sizeof(char **);
|
||||||
|
size += (envc + 1) * sizeof(char **);
|
||||||
|
|
||||||
|
if ((s = (char *) malloc(size)) == NULL) {
|
||||||
|
process_title.str = NULL;
|
||||||
|
process_title.len = 0;
|
||||||
|
return argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_argv = (char **) s;
|
||||||
|
new_env = new_argv + argc + 1;
|
||||||
|
s = (char *) (new_env + envc + 1);
|
||||||
|
memcpy(s, process_title.str, process_title.len);
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
new_argv[i] = s + (argv[i] - argv[0]);
|
||||||
|
new_argv[argc] = NULL;
|
||||||
|
|
||||||
|
s += environ[0] - argv[0];
|
||||||
|
|
||||||
|
for (i = 0; i < envc; i++)
|
||||||
|
new_env[i] = s + (environ[i] - environ[0]);
|
||||||
|
new_env[envc] = NULL;
|
||||||
|
|
||||||
|
environ = new_env;
|
||||||
|
return new_argv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uv_err_t uv_set_process_title(const char* title) {
|
||||||
|
uv_strlcpy(process_title.str, title, process_title.len);
|
||||||
|
return uv_ok_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
||||||
|
uv_strlcpy(buffer, process_title.str ? process_title.str : "", size);
|
||||||
|
return uv_ok_;
|
||||||
|
}
|
18
deps/uv/src/unix/sunos.c
vendored
18
deps/uv/src/unix/sunos.c
vendored
@ -238,24 +238,6 @@ void uv__fs_event_close(uv_fs_event_t* handle) {
|
|||||||
#endif /* HAVE_PORTS_FS */
|
#endif /* HAVE_PORTS_FS */
|
||||||
|
|
||||||
|
|
||||||
char** uv_setup_args(int argc, char** argv) {
|
|
||||||
return argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_set_process_title(const char* title) {
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_get_process_title(char* buffer, size_t size) {
|
|
||||||
if (size > 0) {
|
|
||||||
buffer[0] = '\0';
|
|
||||||
}
|
|
||||||
return uv_ok_;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uv_err_t uv_resident_set_memory(size_t* rss) {
|
uv_err_t uv_resident_set_memory(size_t* rss) {
|
||||||
psinfo_t psinfo;
|
psinfo_t psinfo;
|
||||||
uv_err_t err;
|
uv_err_t err;
|
||||||
|
40
deps/uv/src/unix/thread.c
vendored
40
deps/uv/src/unix/thread.c
vendored
@ -167,6 +167,44 @@ void uv_once(uv_once_t* guard, void (*callback)(void)) {
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
|
||||||
|
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
||||||
|
return semaphore_create(mach_task_self(), sem, SYNC_POLICY_FIFO, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void uv_sem_destroy(uv_sem_t* sem) {
|
||||||
|
if (semaphore_destroy(mach_task_self(), *sem))
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void uv_sem_post(uv_sem_t* sem) {
|
||||||
|
if (semaphore_signal(*sem))
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void uv_sem_wait(uv_sem_t* sem) {
|
||||||
|
if (semaphore_wait(*sem))
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int uv_sem_trywait(uv_sem_t* sem) {
|
||||||
|
mach_timespec_t interval;
|
||||||
|
|
||||||
|
interval.tv_sec = 0;
|
||||||
|
interval.tv_nsec = 0;
|
||||||
|
|
||||||
|
if (semaphore_timedwait(*sem, interval) == KERN_SUCCESS)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !(defined(__APPLE__) && defined(__MACH__)) */
|
||||||
|
|
||||||
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
||||||
return sem_init(sem, 0, value);
|
return sem_init(sem, 0, value);
|
||||||
@ -209,3 +247,5 @@ int uv_sem_trywait(uv_sem_t* sem) {
|
|||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* defined(__APPLE__) && defined(__MACH__) */
|
||||||
|
13
deps/uv/test/test-process-title.c
vendored
13
deps/uv/test/test-process-title.c
vendored
@ -23,20 +23,27 @@
|
|||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
TEST_IMPL(process_title) {
|
|
||||||
|
static void set_title(const char* title) {
|
||||||
char buffer[512];
|
char buffer[512];
|
||||||
uv_err_t err;
|
uv_err_t err;
|
||||||
|
|
||||||
err = uv_get_process_title(buffer, sizeof(buffer));
|
err = uv_get_process_title(buffer, sizeof(buffer));
|
||||||
ASSERT(UV_OK == err.code);
|
ASSERT(UV_OK == err.code);
|
||||||
|
|
||||||
err = uv_set_process_title("new title");
|
err = uv_set_process_title(title);
|
||||||
ASSERT(UV_OK == err.code);
|
ASSERT(UV_OK == err.code);
|
||||||
|
|
||||||
err = uv_get_process_title(buffer, sizeof(buffer));
|
err = uv_get_process_title(buffer, sizeof(buffer));
|
||||||
ASSERT(UV_OK == err.code);
|
ASSERT(UV_OK == err.code);
|
||||||
|
|
||||||
ASSERT(strcmp(buffer, "new title") == 0);
|
ASSERT(strcmp(buffer, title) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST_IMPL(process_title) {
|
||||||
|
/* Check for format string vulnerabilities. */
|
||||||
|
set_title("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s");
|
||||||
|
set_title("new title");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
3
deps/uv/uv.gyp
vendored
3
deps/uv/uv.gyp
vendored
@ -287,6 +287,9 @@
|
|||||||
[ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
[ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', {
|
||||||
'sources': [ 'src/unix/kqueue.c' ],
|
'sources': [ 'src/unix/kqueue.c' ],
|
||||||
}],
|
}],
|
||||||
|
[ 'OS!="win" and OS!="freebsd"', {
|
||||||
|
'sources': [ 'src/unix/proctitle.c' ],
|
||||||
|
}],
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user