Merge branch 'v0.10'

Conflicts:
	ChangeLog
	config-unix.mk
	src/version.c
This commit is contained in:
Bert Belder 2013-05-14 17:03:24 -07:00
commit 961202d1c2
6 changed files with 92 additions and 4 deletions

View File

@ -85,3 +85,4 @@ Kristian Evensen <kristian.evensen@gmail.com>
Nils Maier <maierman@web.de> Nils Maier <maierman@web.de>
Nicholas Vavilov <vvnicholas@gmail.com> Nicholas Vavilov <vvnicholas@gmail.com>
Miroslav Bajtoš <miro.bajtos@gmail.com> Miroslav Bajtoš <miro.bajtos@gmail.com>
Elliot Saba <staticfloat@gmail.com>

View File

@ -1,3 +1,39 @@
2013.05.15, Version 0.10.7 (Stable), 028baaf0846b686a81e992cb2f2f5a9b8e841fcf
Changes since version 0.10.6:
* windows: kill child processes when the parent dies (Bert Belder)
2013.05.15, Version 0.10.6 (Stable), 11e6613e6260d95c8cf11bf89a2759c24649319a
Changes since version 0.10.5:
* stream: fix osx select hack (Fedor Indutny)
* stream: fix small nit in select hack, add test (Fedor Indutny)
* build: link with libkvm on openbsd (Ben Noordhuis)
* stream: use harder sync restrictions for osx-hack (Fedor Indutny)
* unix: fix EMFILE error handling (Ben Noordhuis)
* darwin: fix unnecessary include headers (Daisuke Murase)
* darwin: rename darwin-getproctitle.m (Ben Noordhuis)
* build: convert predefined $PLATFORM to lower case (Elliot Saba)
* build: set soname in shared library (Ben Noordhuis)
* build: make `make test` link against .a again (Ben Noordhuis)
* darwin: fix ios build, don't require ApplicationServices (Ben Noordhuis)
* build: only set soname on shared object builds (Timothy J. Fontaine)
2013.05.11, Version 0.11.2 (Unstable), 3fba0bf65f091b91a9760530c05c6339c658d88b 2013.05.11, Version 0.11.2 (Unstable), 3fba0bf65f091b91a9760530c05c6339c658d88b
Changes since version 0.11.1: Changes since version 0.11.1:

View File

@ -144,7 +144,7 @@ endif
ifneq (darwin,$(PLATFORM)) ifneq (darwin,$(PLATFORM))
# Must correspond with UV_VERSION_MAJOR and UV_VERSION_MINOR in src/version.c # Must correspond with UV_VERSION_MAJOR and UV_VERSION_MINOR in src/version.c
LDFLAGS += -Wl,-soname,libuv.so.0.11 SO_LDFLAGS = -Wl,-soname,libuv.so.0.11
endif endif
RUNNER_LDFLAGS += $(LDFLAGS) RUNNER_LDFLAGS += $(LDFLAGS)
@ -154,7 +154,7 @@ libuv.a: $(OBJS)
libuv.$(SOEXT): override CFLAGS += -fPIC libuv.$(SOEXT): override CFLAGS += -fPIC
libuv.$(SOEXT): $(OBJS:%.o=%.pic.o) libuv.$(SOEXT): $(OBJS:%.o=%.pic.o)
$(CC) -shared -o $@ $^ $(LDFLAGS) $(CC) -shared -o $@ $^ $(LDFLAGS) $(SO_LDFLAGS)
include/uv-private/uv-unix.h: \ include/uv-private/uv-unix.h: \
include/uv-private/uv-bsd.h \ include/uv-private/uv-bsd.h \

View File

@ -18,11 +18,18 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
#include <TargetConditionals.h>
#if !TARGET_OS_IPHONE
# include <CoreFoundation/CoreFoundation.h> # include <CoreFoundation/CoreFoundation.h>
# include <ApplicationServices/ApplicationServices.h> # include <ApplicationServices/ApplicationServices.h>
#endif
int uv__set_process_title(const char* title) { int uv__set_process_title(const char* title) {
#if TARGET_OS_IPHONE
return -1;
#else
typedef CFTypeRef (*LSGetCurrentApplicationASNType)(void); typedef CFTypeRef (*LSGetCurrentApplicationASNType)(void);
typedef OSStatus (*LSSetApplicationInformationItemType)(int, typedef OSStatus (*LSSetApplicationInformationItemType)(int,
CFTypeRef, CFTypeRef,
@ -76,4 +83,5 @@ int uv__set_process_title(const char* title) {
NULL); NULL);
return (err == noErr) ? 0 : -1; return (err == noErr) ? 0 : -1;
#endif /* !TARGET_OS_IPHONE */
} }

View File

@ -45,6 +45,36 @@ typedef struct env_var {
#define E_V(str) { str "=", L##str, sizeof(str), 0, 0 } #define E_V(str) { str "=", L##str, sizeof(str), 0, 0 }
static HANDLE uv_global_job_handle_;
static uv_once_t uv_global_job_handle_init_guard_ = UV_ONCE_INIT;
static void uv__init_global_job_handle() {
SECURITY_ATTRIBUTES attr;
JOBOBJECT_EXTENDED_LIMIT_INFORMATION info;
memset(&attr, 0, sizeof attr);
attr.bInheritHandle = FALSE;
memset(&info, 0, sizeof info);
info.BasicLimitInformation.LimitFlags =
JOB_OBJECT_LIMIT_BREAKAWAY_OK |
JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK |
JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION |
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
uv_global_job_handle_ = CreateJobObjectW(&attr, NULL);
if (uv_global_job_handle_ == NULL)
uv_fatal_error(GetLastError(), "CreateJobObjectW");
if (!SetInformationJobObject(uv_global_job_handle_,
JobObjectExtendedLimitInformation,
&info,
sizeof info))
uv_fatal_error(GetLastError(), "SetInformationJobObject");
}
static uv_err_t uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) { static uv_err_t uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) {
int ws_len, r; int ws_len, r;
WCHAR* ws; WCHAR* ws;
@ -908,6 +938,15 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process,
process->process_handle = info.hProcess; process->process_handle = info.hProcess;
process->pid = info.dwProcessId; process->pid = info.dwProcessId;
/* If the process isn't spawned as detached, assign to the global job */
/* object so windows will kill it when the parent process dies. */
if (!(options.flags & UV_PROCESS_DETACHED)) {
uv_once(&uv_global_job_handle_init_guard_, uv__init_global_job_handle);
if (!AssignProcessToJobObject(uv_global_job_handle_, info.hProcess))
uv_fatal_error(GetLastError(), "AssignProcessToJobObject");
}
/* Set IPC pid to all IPC pipes. */ /* Set IPC pid to all IPC pipes. */
for (i = 0; i < options.stdio_count; i++) { for (i = 0; i < options.stdio_count; i++) {
const uv_stdio_container_t* fdopt = &options.stdio[i]; const uv_stdio_container_t* fdopt = &options.stdio[i];

View File

@ -42,8 +42,12 @@ static void set_title(const char* title) {
TEST_IMPL(process_title) { TEST_IMPL(process_title) {
#if defined(__sun)
RETURN_SKIP("uv_(get|set)_process_title is not implemented.");
#else
/* Check for format string vulnerabilities. */ /* 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"); set_title("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s");
set_title("new title"); set_title("new title");
return 0; return 0;
#endif
} }