This is an automated email from the git hooks/post-receive script. gregoa pushed a commit to branch master in repository libev-perl.
commit 4cd47146e82cf938cb24523f3371d878b73730b1 Author: gregor herrmann <gre...@debian.org> Date: Sun May 11 18:29:21 2014 +0200 Imported Upstream version 4.17 --- Changes | 21 +++++++++++ EV.pm | 5 ++- EV.xs | 26 ++++++++++--- META.json | 10 ++--- META.yml | 4 +- Makefile.PL | 10 ++--- README | 2 +- libev/Changes | 14 +++++++ libev/LICENSE | 2 +- libev/ev.c | 109 +++++++++++++++++++++++++++++++++++++++++++----------- libev/ev.h | 8 ++-- libev/ev.pod | 20 ++++++---- libev/ev_kqueue.c | 2 +- libev/ev_vars.h | 8 ++-- libev/ev_win32.c | 2 +- schmorp.h | 8 ++-- 16 files changed, 188 insertions(+), 63 deletions(-) diff --git a/Changes b/Changes index 852928d..272c8fe 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,27 @@ Revision history for Perl extension EV Changes marked with (libev) are changes in libev, and have more documentation in the libev Changes file. +TODO: better multiarch detection + +4.17 Fri Apr 11 06:22:38 CEST 2014 + - perl5porters broke Async::Interrupt, BDB, EV, IO::AIO, OpenCL + without warning by switching the meaning of USE_SOCKETS_AS_HANDLES + in 5.18. What's so attractive about giving a shit about backwards + compatibility - I will never understand. + +4.16 Sat Mar 8 16:49:05 CET 2014 + - make sure EV::CHECK is available at all times. + - avoid a spurious warning when perl -w overrides "no warnings". + - use perl's signal implementation on WIN32. + - ensure extern "C" function pointers are used for externally-visible + pointers. + - (libev) mark event pipe fd as cloexec after a fork (analyzed by Sami Farin). + - (ecb) support m68k, m88k and sh (patch by Miod Vallat). + - (libev) in the absence of autoconf, do not use the clock syscall + on glibc >= 2.17 (avoids the syscall AND -lrt on systems + doing clock_gettime in userspace). + - (ecb) work around memory barriers and volatile apparently both being + broken in visual studio 2008 and later (analysed and patch by Nicolas Noble). 4.15 Fri Mar 1 12:15:53 CET 2013 - (libev) upgrade to 4.15 - too many changes to list. diff --git a/EV.pm b/EV.pm index d1d1f5e..70d5d8b 100644 --- a/EV.pm +++ b/EV.pm @@ -121,8 +121,9 @@ package EV; use common::sense; BEGIN { - our $VERSION = '4.15'; + our $VERSION = '4.17'; use XSLoader; + local $^W = 0; # avoid spurious warning XSLoader::load "EV", $VERSION; } @@ -683,7 +684,7 @@ time: my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" }; That doesn't mean there will always be 3600 seconds in between triggers, -but only that the the clalback will be called when the system time shows a +but only that the the callback will be called when the system time shows a full hour (UTC). Another way to think about it (for the mathematically inclined) is that diff --git a/EV.xs b/EV.xs index 6ef81ac..3a9cbc1 100644 --- a/EV.xs +++ b/EV.xs @@ -3,8 +3,10 @@ #include "XSUB.h" /* fix perl api breakage */ -#undef signal -#undef sigaction +#ifndef WIN32 +# undef signal +# undef sigaction +#endif #include "schmorp.h" @@ -15,6 +17,10 @@ sv_fileno (SV *fh) return s_fileno (fh, 0); } +#ifndef GvCV_set +# define GvCV_set(gv,cv) GvCV (gv) = cv +#endif + #define EV_STANDALONE 1 #define EV_PROTOTYPES 1 #define EV_USE_NANOSLEEP EV_USE_MONOTONIC @@ -33,7 +39,7 @@ sv_fileno (SV *fh) /* due to bugs in OS X we have to use libev/ explicitly here */ #include "libev/ev.c" -#if !defined _WIN32 && !defined _MINIX +#if !defined _WIN32 && !defined _MINIX && !EV_NO_ATFORK # include <pthread.h> #endif @@ -383,7 +389,7 @@ BOOT: const_iv (EV_, STAT) const_iv (EV_, IDLE) const_iv (EV_, PREPARE) - const_iv (EV_, CHECK) + /*const_iv (EV_, CHECK) needs special tretament */ const_iv (EV_, EMBED) const_iv (EV_, FORK) const_iv (EV_, CLEANUP) @@ -428,6 +434,16 @@ BOOT: for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--) newCONSTSUB (stash, (char *)civ[-1].name, newSViv (civ[-1].iv)); + /* since this clashes with perl CHECK blocks, */ + /* but we are interested in constants, */ + /* and not blocks, we treat CHECK specially. */ + { + /* the local $^W = 0 takes care of the warning */ + CV *cv = newCONSTSUB (stash, "CHECK", newSViv (EV_CHECK)); + /* now we need to re-set the gv, in case it was hijacked */ + GvCV_set (gv_fetchpv ("EV::CHECK", GV_ADD, SVt_PVCV), cv); + } + stash_loop = gv_stashpv ("EV::Loop" , 1); stash_watcher = gv_stashpv ("EV::Watcher" , 1); stash_io = gv_stashpv ("EV::IO" , 1); @@ -519,7 +535,7 @@ BOOT: sv_setiv (sv, (IV)&evapi); SvREADONLY_on (sv); } -#if !defined _WIN32 && !defined _MINIX +#if !defined _WIN32 && !defined _MINIX && !EV_NO_ATFORK #if __linux int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void * __dso_handle); __register_atfork (0, 0, default_fork, 0); diff --git a/META.json b/META.json index 1a9ff34..215c6c0 100644 --- a/META.json +++ b/META.json @@ -4,7 +4,7 @@ "unknown" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 6.64, CPAN::Meta::Converter version 2.112621", + "generated_by" : "ExtUtils::MakeMaker version 6.86, CPAN::Meta::Converter version 2.133380", "license" : [ "unknown" ], @@ -22,20 +22,20 @@ "prereqs" : { "build" : { "requires" : { - "ExtUtils::MakeMaker" : 0 + "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { - "ExtUtils::MakeMaker" : 0 + "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { - "common::sense" : 0 + "common::sense" : "0" } } }, "release_status" : "stable", - "version" : "4.15" + "version" : "4.17" } diff --git a/META.yml b/META.yml index ea87e28..548a9ab 100644 --- a/META.yml +++ b/META.yml @@ -7,7 +7,7 @@ build_requires: configure_requires: ExtUtils::MakeMaker: 0 dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 6.64, CPAN::Meta::Converter version 2.112621' +generated_by: 'ExtUtils::MakeMaker version 6.86, CPAN::Meta::Converter version 2.133380' license: unknown meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -19,4 +19,4 @@ no_index: - inc requires: common::sense: 0 -version: 4.15 +version: 4.17 diff --git a/Makefile.PL b/Makefile.PL index 9fcf03b..ad4246c 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -294,11 +294,11 @@ WriteMakefile( }, VERSION_FROM => "EV.pm", PM => { - 'EV.pm' => '$(INST_LIBDIR)/EV.pm', - 'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h', - 'EV/MakeMaker.pm' => '$(INST_LIBDIR)/EV/MakeMaker.pm', - 'libev/ev.h' => '$(INST_LIBDIR)/EV/ev.h', - 'libev/ev.pod' => '$(INST_LIBDIR)/EV/libev.pod', + 'EV.pm' => '$(INST_LIB)/EV.pm', + 'EV/EVAPI.h' => '$(INST_LIB)/EV/EVAPI.h', + 'EV/MakeMaker.pm' => '$(INST_LIB)/EV/MakeMaker.pm', + 'libev/ev.h' => '$(INST_LIB)/EV/ev.h', + 'libev/ev.pod' => '$(INST_LIB)/EV/libev.pod', }, MAN3PODS => { 'EV.pm' => '$(INST_MAN3DIR)/EV.$(MAN3EXT)', diff --git a/README b/README index 42f654c..c9cc10c 100644 --- a/README +++ b/README @@ -560,7 +560,7 @@ WATCHER TYPES my $hourly = EV::periodic 0, 3600, 0, sub { print "once/hour\n" }; That doesn't mean there will always be 3600 seconds in between - triggers, but only that the the clalback will be called when the + triggers, but only that the the callback will be called when the system time shows a full hour (UTC). Another way to think about it (for the mathematically inclined) diff --git a/libev/Changes b/libev/Changes index 00a03f1..ed3f2b0 100644 --- a/libev/Changes +++ b/libev/Changes @@ -12,6 +12,20 @@ TODO: document file descriptor usage per loop TODO: store loop pid_t and compare isndie signal handler,store 1 for same, 2 for differign pid, clean up in loop_fork TODO: embed watchers need updating when fd changes TODO: document portbaility requirements for atomic pointer access +TODO: possible cb aliasing? +TODO: document requirements for function piinters and calling conventions. + + - mark event pipe fd as cloexec after a fork (analyzed by Sami Farin). + - (ecb) support m68k, m88k and sh (patch by Miod Vallat). + - use a reasonable fallback for EV_NSIG instead of erroring out + when we can't detect the signal set size. + - in the absence of autoconf, do not use the clock syscall + on glibc >= 2.17 (avoids the syscall AND -lrt on systems + doing clock_gettime in userspace). + - ensure extern "C" function pointers are used for externally-visible + loop callbacks (not watcher callbacks yet). + - (ecb) work around memory barriers and volatile apparently both being + broken in visual studio 2008 and later (analysed and patch by Nicolas Noble). 4.15 Fri Mar 1 12:04:50 CET 2013 - destroying a non-default loop would stop the global waitpid diff --git a/libev/LICENSE b/libev/LICENSE index 777d67c..2fdabd4 100644 --- a/libev/LICENSE +++ b/libev/LICENSE @@ -1,5 +1,5 @@ All files in libev are -Copyright (c)2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann. +Copyright (c)2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are diff --git a/libev/ev.c b/libev/ev.c index e5bd5ab..b233e21 100644 --- a/libev/ev.c +++ b/libev/ev.c @@ -1,7 +1,7 @@ /* * libev event processing core, watcher management * - * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <li...@schmorp.de> + * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <li...@schmorp.de> * All rights reserved. * * Redistribution and use in source and binary forms, with or without modifica- @@ -243,10 +243,7 @@ #elif defined _sys_nsig # define EV_NSIG (_sys_nsig) /* Solaris 2.5 */ #else -# error "unable to find value for NSIG, please report" -/* to make it compile regardless, just remove the above line, */ -/* but consider reporting it, too! :) */ -# define EV_NSIG 65 +# define EV_NSIG (8 * sizeof (sigset_t) + 1) #endif #ifndef EV_USE_FLOOR @@ -254,7 +251,7 @@ #endif #ifndef EV_USE_CLOCK_SYSCALL -# if __linux && __GLIBC__ >= 2 +# if __linux && __GLIBC__ == 2 && __GLIBC_MINOR__ < 17 # define EV_USE_CLOCK_SYSCALL EV_FEATURE_OS # else # define EV_USE_CLOCK_SYSCALL 0 @@ -487,7 +484,7 @@ struct signalfd_siginfo /* * libecb - http://software.schmorp.de/pkg/libecb * - * Copyright (©) 2009-2012 Marc Alexander Lehmann <lib...@schmorp.de> + * Copyright (©) 2009-2014 Marc Alexander Lehmann <lib...@schmorp.de> * Copyright (©) 2011 Emanuele Giaquinta * All rights reserved. * @@ -552,8 +549,8 @@ struct signalfd_siginfo #endif /* work around x32 idiocy by defining proper macros */ -#if __x86_64 || _M_AMD64 - #if __ILP32 +#if __amd64 || __x86_64 || _M_AMD64 || _M_X64 + #if _ILP32 #define ECB_AMD64_X32 1 #else #define ECB_AMD64 1 @@ -575,13 +572,21 @@ struct signalfd_siginfo #endif #endif -#define ECB_C (__STDC__+0) /* this assumes that __STDC__ is either empty or a number */ -#define ECB_C99 (__STDC_VERSION__ >= 199901L) -#define ECB_C11 (__STDC_VERSION__ >= 201112L) #define ECB_CPP (__cplusplus+0) #define ECB_CPP11 (__cplusplus >= 201103L) #if ECB_CPP + #define ECB_C 0 + #define ECB_STDC_VERSION 0 +#else + #define ECB_C 1 + #define ECB_STDC_VERSION __STDC_VERSION__ +#endif + +#define ECB_C99 (ECB_STDC_VERSION >= 199901L) +#define ECB_C11 (ECB_STDC_VERSION >= 201112L) + +#if ECB_CPP #define ECB_EXTERN_C extern "C" #define ECB_EXTERN_C_BEG ECB_EXTERN_C { #define ECB_EXTERN_C_END } @@ -622,14 +627,18 @@ struct signalfd_siginfo #elif defined __ARM_ARCH_7__ || defined __ARM_ARCH_7A__ \ || defined __ARM_ARCH_7M__ || defined __ARM_ARCH_7R__ #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb" : : : "memory") - #elif __sparc || __sparc__ + #elif __aarch64__ + #define ECB_MEMORY_FENCE __asm__ __volatile__ ("dmb ish" : : : "memory") + #elif (__sparc || __sparc__) && !__sparcv8 #define ECB_MEMORY_FENCE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad" : : : "memory") #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") #elif defined __s390__ || defined __s390x__ #define ECB_MEMORY_FENCE __asm__ __volatile__ ("bcr 15,0" : : : "memory") #elif defined __mips__ - #define ECB_MEMORY_FENCE __asm__ __volatile__ ("sync" : : : "memory") + /* GNU/Linux emulates sync on mips1 architectures, so we force its use */ + /* anybody else who still uses mips1 is supposed to send in their version, with detection code. */ + #define ECB_MEMORY_FENCE __asm__ __volatile__ (".set mips2; sync; .set mips0" : : : "memory") #elif defined __alpha__ #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mb" : : : "memory") #elif defined __hppa__ @@ -637,6 +646,12 @@ struct signalfd_siginfo #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("") #elif defined __ia64__ #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mf" : : : "memory") + #elif defined __m68k__ + #define ECB_MEMORY_FENCE __asm__ __volatile__ ("" : : : "memory") + #elif defined __m88k__ + #define ECB_MEMORY_FENCE __asm__ __volatile__ ("tb1 0,%%r0,128" : : : "memory") + #elif defined __sh__ + #define ECB_MEMORY_FENCE __asm__ __volatile__ ("" : : : "memory") #endif #endif #endif @@ -645,6 +660,8 @@ struct signalfd_siginfo #if ECB_GCC_VERSION(4,7) /* see comment below (stdatomic.h) about the C11 memory model. */ #define ECB_MEMORY_FENCE __atomic_thread_fence (__ATOMIC_SEQ_CST) + #define ECB_MEMORY_FENCE_ACQUIRE __atomic_thread_fence (__ATOMIC_ACQUIRE) + #define ECB_MEMORY_FENCE_RELEASE __atomic_thread_fence (__ATOMIC_RELEASE) /* The __has_feature syntax from clang is so misdesigned that we cannot use it * without risking compile time errors with other compilers. We *could* @@ -653,10 +670,18 @@ struct signalfd_siginfo * #elif defined __clang && __has_feature (cxx_atomic) * // see comment below (stdatomic.h) about the C11 memory model. * #define ECB_MEMORY_FENCE __c11_atomic_thread_fence (__ATOMIC_SEQ_CST) + * #define ECB_MEMORY_FENCE_ACQUIRE __c11_atomic_thread_fence (__ATOMIC_ACQUIRE) + * #define ECB_MEMORY_FENCE_RELEASE __c11_atomic_thread_fence (__ATOMIC_RELEASE) */ #elif ECB_GCC_VERSION(4,4) || defined __INTEL_COMPILER || defined __clang__ #define ECB_MEMORY_FENCE __sync_synchronize () + #elif _MSC_VER >= 1500 /* VC++ 2008 */ + /* apparently, microsoft broke all the memory barrier stuff in Visual Studio 2008... */ + #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier) + #define ECB_MEMORY_FENCE _ReadWriteBarrier (); MemoryBarrier() + #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier (); MemoryBarrier() /* according to msdn, _ReadBarrier is not a load fence */ + #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier (); MemoryBarrier() #elif _MSC_VER >= 1400 /* VC++ 2005 */ #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier) #define ECB_MEMORY_FENCE _ReadWriteBarrier () @@ -686,6 +711,8 @@ struct signalfd_siginfo /* for most usages, or gcc and clang have a bug */ /* I *currently* lean towards the latter, and inefficiently implement */ /* all three of ecb's fences as a seq_cst fence */ + /* Update, gcc-4.8 generates mfence for all c++ fences, but nothing */ + /* for all __atomic_thread_fence's except seq_cst */ #define ECB_MEMORY_FENCE atomic_thread_fence (memory_order_seq_cst) #endif #endif @@ -752,6 +779,11 @@ typedef int ecb_bool; #define ecb_prefetch(addr,rw,locality) __builtin_prefetch (addr, rw, locality) #else #define ecb_attribute(attrlist) + + /* possible C11 impl for integral types + typedef struct ecb_is_constant_struct ecb_is_constant_struct; + #define ecb_is_constant(expr) _Generic ((1 ? (struct ecb_is_constant_struct *)0 : (void *)((expr) - (expr)), ecb_is_constant_struct *: 0, default: 1)) */ + #define ecb_is_constant(expr) 0 #define ecb_expect(expr,value) (expr) #define ecb_prefetch(addr,rw,locality) @@ -1047,22 +1079,57 @@ ecb_inline ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == || __i386 || __i386__ \ || __amd64 || __amd64__ || __x86_64 || __x86_64__ \ || __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__ \ - || defined __arm__ && defined __ARM_EABI__ \ || defined __s390__ || defined __s390x__ \ || defined __mips__ \ || defined __alpha__ \ || defined __hppa__ \ || defined __ia64__ \ - || defined _M_IX86 || defined _M_AMD64 || defined _M_IA64 + || defined __m68k__ \ + || defined __m88k__ \ + || defined __sh__ \ + || defined _M_IX86 || defined _M_AMD64 || defined _M_IA64 \ + || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \ + || defined __aarch64__ #define ECB_STDFP 1 #include <string.h> /* for memcpy */ #else #define ECB_STDFP 0 - #include <math.h> /* for frexp*, ldexp* */ #endif #ifndef ECB_NO_LIBM + #include <math.h> /* for frexp*, ldexp*, INFINITY, NAN */ + + /* only the oldest of old doesn't have this one. solaris. */ + #ifdef INFINITY + #define ECB_INFINITY INFINITY + #else + #define ECB_INFINITY HUGE_VAL + #endif + + #ifdef NAN + #define ECB_NAN NAN + #else + #define ECB_NAN ECB_INFINITY + #endif + + /* converts an ieee half/binary16 to a float */ + ecb_function_ float ecb_binary16_to_float (uint16_t x) ecb_const; + ecb_function_ float + ecb_binary16_to_float (uint16_t x) + { + int e = (x >> 10) & 0x1f; + int m = x & 0x3ff; + float r; + + if (!e ) r = ldexpf (m , -24); + else if (e != 31) r = ldexpf (m + 0x400, e - 25); + else if (m ) r = ECB_NAN; + else r = ECB_INFINITY; + + return x & 0x8000 ? -r : r; + } + /* convert a float to ieee single/binary32 */ ecb_function_ uint32_t ecb_float_to_binary32 (float x) ecb_const; ecb_function_ uint32_t @@ -2106,8 +2173,6 @@ evpipe_init (EV_P) fd_intern (fds [0]); } - fd_intern (fds [1]); - evpipe [0] = fds [0]; if (evpipe [1] < 0) @@ -2123,6 +2188,8 @@ evpipe_init (EV_P) close (fds [1]); } + fd_intern (evpipe [1]); + ev_io_set (&pipe_w, evpipe [0] < 0 ? evpipe [1] : evpipe [0], EV_READ); ev_io_start (EV_A_ &pipe_w); ev_unref (EV_A); /* watcher should not keep loop alive */ @@ -2515,13 +2582,13 @@ ev_userdata (EV_P) EV_THROW } void -ev_set_invoke_pending_cb (EV_P_ void (*invoke_pending_cb)(EV_P)) EV_THROW +ev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW { invoke_cb = invoke_pending_cb; } void -ev_set_loop_release_cb (EV_P_ void (*release)(EV_P) EV_THROW, void (*acquire)(EV_P) EV_THROW) EV_THROW +ev_set_loop_release_cb (EV_P_ ev_loop_callback_nothrow release, ev_loop_callback_nothrow acquire) EV_THROW { release_cb = release; acquire_cb = acquire; diff --git a/libev/ev.h b/libev/ev.h index c5d582e..38a507e 100644 --- a/libev/ev.h +++ b/libev/ev.h @@ -658,8 +658,10 @@ EV_API_DECL void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval) EV_T /* advanced stuff for threading etc. support, see docs */ EV_API_DECL void ev_set_userdata (EV_P_ void *data) EV_THROW; EV_API_DECL void *ev_userdata (EV_P) EV_THROW; -EV_API_DECL void ev_set_invoke_pending_cb (EV_P_ void (*invoke_pending_cb)(EV_P)) EV_THROW; -EV_API_DECL void ev_set_loop_release_cb (EV_P_ void (*release)(EV_P), void (*acquire)(EV_P) EV_THROW) EV_THROW; +typedef void (*ev_loop_callback)(EV_P); +EV_API_DECL void ev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW; +typedef void (*ev_loop_callback_nothrow)(EV_P) EV_THROW; +EV_API_DECL void ev_set_loop_release_cb (EV_P_ ev_loop_callback_nothrow release, ev_loop_callback_nothrow acquire) EV_THROW; EV_API_DECL unsigned int ev_pending_count (EV_P) EV_THROW; /* number of pending events, if any */ EV_API_DECL void ev_invoke_pending (EV_P); /* invoke all pending watchers */ @@ -730,7 +732,7 @@ EV_API_DECL void ev_resume (EV_P) EV_THROW; #endif /* stopping (enabling, adding) a watcher does nothing if it is already running */ -/* stopping (disabling, deleting) a watcher does nothing unless its already running */ +/* stopping (disabling, deleting) a watcher does nothing unless it's already running */ #if EV_PROTOTYPES /* feeds an event into a watcher as if the event actually occurred */ diff --git a/libev/ev.pod b/libev/ev.pod index 73c4d34..ecbbe38 100644 --- a/libev/ev.pod +++ b/libev/ev.pod @@ -1,3 +1,5 @@ +=encoding utf-8 + =head1 NAME libev - a high performance full-featured event loop written in C @@ -398,8 +400,10 @@ If this flag bit is or'ed into the flag value (or the program runs setuid or setgid) then libev will I<not> look at the environment variable C<LIBEV_FLAGS>. Otherwise (the default), this environment variable will override the flags completely if it is found in the environment. This is -useful to try out specific backends to test their performance, or to work -around bugs. +useful to try out specific backends to test their performance, to work +around bugs, or to make libev threadsafe (accessing environment variables +cannot be done in a threadsafe way, but usually it works if no other +thread modifies them). =item C<EVFLAG_FORKCHECK> @@ -686,7 +690,7 @@ name, you can call it anytime, but it makes most sense after forking, in the child process. You I<must> call it (or use C<EVFLAG_FORKCHECK>) in the child before resuming or calling C<ev_run>. -Again, you I<have> to call it on I<any> loop that you want to re-use after +Again, you I<have> to call it on I<any> loop that you want to re-use after a fork, I<even if you do not plan to use the loop in the parent>. This is because some kernel interfaces *cough* I<kqueue> *cough* do funny things during fork. @@ -2411,9 +2415,9 @@ default loop and for C<SIGIO> in another loop, but you cannot watch for C<SIGINT> in both the default loop and another loop at the same time. At the moment, C<SIGCHLD> is permanently tied to the default loop. -When the first watcher gets started will libev actually register something -with the kernel (thus it coexists with your own signal handlers as long as -you don't register any with libev for the same signal). +Only after the first watcher for a signal is started will libev actually +register something with the kernel. It thus coexists with your own signal +handlers as long as you don't register any with libev for the same signal. If possible and supported, libev will install its handlers with C<SA_RESTART> (or equivalent) behaviour enabled, so system calls should @@ -3982,7 +3986,7 @@ you to use some convenience methods to start/stop watchers and also change the callback model to a model using method callbacks on objects. To use it, - + #include <ev++.h> This automatically includes F<ev.h> and puts all of its definitions (many @@ -5429,7 +5433,7 @@ new API early than late. =item C<EV_COMPAT3> backwards compatibility mechanism The backward compatibility mechanism can be controlled by -C<EV_COMPAT3>. See L</PREPROCESSOR SYMBOLS/MACROS> in the L</EMBEDDING> +C<EV_COMPAT3>. See L</"PREPROCESSOR SYMBOLS/MACROS"> in the L</EMBEDDING> section. =item C<ev_default_destroy> and C<ev_default_fork> have been removed diff --git a/libev/ev_kqueue.c b/libev/ev_kqueue.c index 9faf65a..27def23 100644 --- a/libev/ev_kqueue.c +++ b/libev/ev_kqueue.c @@ -1,7 +1,7 @@ /* * libev kqueue backend * - * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <li...@schmorp.de> + * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <li...@schmorp.de> * All rights reserved. * * Redistribution and use in source and binary forms, with or without modifica- diff --git a/libev/ev_vars.h b/libev/ev_vars.h index 5fd9c7a..98f7718 100644 --- a/libev/ev_vars.h +++ b/libev/ev_vars.h @@ -1,7 +1,7 @@ /* * loop member variable declarations * - * Copyright (c) 2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann <li...@schmorp.de> + * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <li...@schmorp.de> * All rights reserved. * * Redistribution and use in source and binary forms, with or without modifica- @@ -194,9 +194,9 @@ VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */ VARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */ VARx(void *, userdata) -VAR (release_cb, void (*release_cb)(EV_P) EV_THROW) -VAR (acquire_cb, void (*acquire_cb)(EV_P) EV_THROW) -VAR (invoke_cb , void (*invoke_cb) (EV_P)) +VAR (release_cb, ev_loop_callback_nothrow release_cb) +VAR (acquire_cb, ev_loop_callback_nothrow acquire_cb) +VAR (invoke_cb , ev_loop_callback invoke_cb) #endif #undef VARx diff --git a/libev/ev_win32.c b/libev/ev_win32.c index 9217af5..d65634c 100644 --- a/libev/ev_win32.c +++ b/libev/ev_win32.c @@ -143,7 +143,7 @@ fail: #undef pipe #define pipe(filedes) ev_pipe (filedes) - + #define EV_HAVE_EV_TIME 1 ev_tstamp ev_time (void) diff --git a/schmorp.h b/schmorp.h index 2ed1e59..4b3709f 100644 --- a/schmorp.h +++ b/schmorp.h @@ -190,7 +190,7 @@ s_get_cv (SV *cb_sv) dTHX; HV *st; GV *gvp; - + return (SV *)sv_2cv (cb_sv, &st, &gvp, 0); } @@ -234,7 +234,7 @@ s_gensub (pTHX_ void (*xsub)(pTHX_ CV *), void *arg) /*****************************************************************************/ /* portable pipe/socketpair */ -#ifdef USE_SOCKETS_AS_HANDLES +#if defined(USE_SOCKETS_AS_HANDLES) || PERL_VERSION_ATLEAST(5,18,0) # define S_TO_HANDLE(x) ((HANDLE)win32_get_osfhandle (x)) #else # define S_TO_HANDLE(x) ((HANDLE)x) @@ -255,7 +255,7 @@ s_pipe (int filedes [2]) SOCKET listener; SOCKET sock [2] = { -1, -1 }; - if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) + if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) return -1; addr.sin_family = AF_INET; @@ -271,7 +271,7 @@ s_pipe (int filedes [2]) if (listen (listener, 1)) goto fail; - if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) + if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) goto fail; if (connect (sock [0], (struct sockaddr *)&addr, addr_size)) -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libev-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits