Aaron Piotrowski
a309a243c2
Fix formatting
2016-05-21 12:07:08 -05:00
Aaron Piotrowski
c7f64ce2c0
Initial commit
2016-05-21 09:44:52 -05:00
Bob Weinand
4f2161da5f
Fix notices in NativeReactor; prepare tag 1.2.2
2016-05-12 14:54:59 +02:00
Bob Weinand
87a5f29ab4
Fix potential infinite loop in UvReactor::run(); prepare tag 1.2.1
2016-05-12 07:51:11 +02:00
Bob Weinand
452c9b7295
Force leading backslashes everywhere
2016-05-11 18:53:20 +02:00
Niklas Keller
d9aa8573f0
Throw InvalidArgumentException if argument to resolve() is neither callable nor an instance of Generator
2016-05-11 18:49:25 +02:00
Bob Weinand
92e004264c
resolve() accepts callables returning generators - added to changelog
2016-05-11 18:28:19 +02:00
Chris Wright
3ab10de2a2
Accept callables to resolve()
2016-05-11 17:13:15 +01:00
Bob Weinand
cc7db038b3
Fix mem leaks & circular reference; prepare tag 1.1.1
2016-05-11 03:36:46 +02:00
Niklas Keller
7046ca47e1
Expose combined exceptions in combinator exception
...
Also fix indent, escape sequences and docs
2016-03-09 14:09:15 +01:00
Bob Weinand
d3212d4638
NativeReactor needs to always end in stopped state
...
(under normal circumstances)
2016-03-08 12:14:19 +01:00
Danack
a78cc09dac
Avoid invalid escape sequences.
2016-02-24 12:56:47 +00:00
Bob Weinand
e925017519
If no timer has ever been defined, also block indef
...
Instead of a loop being uselessly repeated each one second (but that doesn't matter in real world actually)
2016-02-22 23:29:31 +01:00
Bob Weinand
4b667478f4
Fixed bug causing NativeReactor to run at 100% CPU
...
See also https://github.com/amphp/aerys/issues/68
2016-02-22 23:17:50 +01:00
Bob Weinand
5341a4cb92
Fix combinator functions, prepare tag 1.0.7
...
$struct->remaining may be negative in case of bare values passed to combinator functions
2016-01-09 15:19:56 +01:00
Bob Weinand
9f76a3f16e
Fix NativeReactor::stop() being delayed, prepare tag 1.0.6
2015-11-16 03:02:13 +01:00
Bob Weinand
3057329a5c
Update tests for CombinatorException, prepare tag 1.0.5
2015-09-30 14:31:53 +02:00
Niklas Keller
00898cd6af
Convert RuntimeException to CombinatorException
2015-09-23 22:56:55 +02:00
Bob Weinand
63055f0784
AssertionException => AssertionError
2015-09-19 17:43:57 +02:00
Bob Weinand
de205d29e1
LibeventReactor::repeat() interpreted $msInterval as microseconds
2015-09-10 21:21:57 +02:00
Bob Weinand
8f884b0b9d
Fix bug causing infinite busy wait with active immediates
2015-08-20 03:28:14 +02:00
Bob Weinand
e74926e7da
Fix buggy keepAliveCount in NativeReactor
2015-08-20 02:21:20 +02:00
Markus Staab
f170acee71
Check array index instead of error suppression
2015-08-18 16:01:08 +02:00
Niklas Keller
8031623a8f
Check array index instead of error suppression
2015-08-18 14:46:34 +02:00
Niklas Keller
2fe4c65faa
Catch Throwables in __coroutineSend on PHP 7
2015-08-18 08:55:44 +02:00
Daniel Lowrey
861fca1ebd
Fix outdated docblocks
2015-08-16 20:33:07 -04:00
Daniel Lowrey
3d1fde0812
Use correct uv flags to prevent UvReactor::tick() from hanging in edge-case scenarios
2015-08-11 20:01:25 -04:00
Daniel Lowrey
7df9b175ef
Perform manual GC prior to run loop end
2015-08-10 13:36:25 -04:00
Daniel Lowrey
6612bb84df
Revert "gc just to be safe prior to run loop exit"
...
This reverts commit ad4831888f
.
2015-08-08 11:50:22 -04:00
Daniel Lowrey
5cad406795
Normalize coroutine() return to Promise type
2015-08-07 11:01:36 -04:00
Daniel Lowrey
ad4831888f
gc just to be safe prior to run loop exit
2015-08-06 14:37:29 -04:00
Niklas Keller
39d3212fb0
Fix documentation for Failure
2015-08-05 23:45:29 +02:00
Niklas Keller
e00d5a7c41
Fix documentation for Failure
2015-08-05 22:49:32 +02:00
Daniel Lowrey
e209ee189d
Don't unload watchers when the run loop finishes
2015-08-05 13:13:16 -04:00
Daniel Lowrey
a7b057ace1
Add leading namespace slash for built-in functions
2015-08-04 23:58:49 -04:00
Daniel Lowrey
cf206dd898
Add "state" key to Amp\info() return array
2015-08-04 23:47:20 -04:00
Daniel Lowrey
70f4971ae1
Remove stream() in favor of PromiseStream
2015-08-04 23:46:49 -04:00
Daniel Lowrey
7c35dc7efd
Fix keep_alive refcount off-by-one error in reactor implementations
2015-08-04 23:11:52 -04:00
Daniel Lowrey
98f609a99a
Clear watchers on run() loop exit, throw on invalid run/tick/stop calls
2015-08-04 11:07:13 -04:00
Daniel Lowrey
f840ee4334
update incorrect docblock
2015-08-01 23:03:25 -04:00
Daniel Lowrey
2c8727133e
functor argument is now optional in Amp\filter()
...
If no functor parameter is supplied, all results equal to FALSE
using a (bool) cast will be removed.
2015-08-01 13:28:41 -04:00
Daniel Lowrey
705c57483b
Fail promise timeout() operations using TimeoutException
2015-07-31 15:50:27 -04:00
Daniel Lowrey
094899a74b
Add boolean "keep_alive" option for all watcher types
...
This option determines if the watcher will keep the run() loop
from returning. By default all watchers set "keep_alive" => true.
Setting this value to false is ideal for registering non-crucial
watchers (e.g. cache invalidation timers) that should run for the
life of the program but shouldn't prevent the event loop from
returning if all essential tasks have completed.
<?php
echo "before run\n";
run(function () {
immediately(function () {
echo "immediately\n";
});
once(function () {
echo "once\n";
}, 100, ["keep_alive" => false]);
repeat(function () {
echo "repeat\n";
}, 500, ["keep_alive" => false]);
echo "onStart end\n";
});
echo "after run\n";
The above snippet will have the following output:
before run
immediately
after run
The Amp\info() function now also reports the number of
keep_alive watchers currently registered via the "keep_alive" key.
2015-07-31 09:32:22 -04:00
Daniel Lowrey
bdd8503cbe
init() -> driver()
2015-07-31 09:32:21 -04:00
Daniel Lowrey
b1f400cad5
misc v1 cleanup
2015-07-29 23:23:53 -04:00
Daniel Lowrey
56b6330114
Use object hashes as watcher IDs
2015-07-29 22:12:53 -04:00
Daniel Lowrey
8bcbba41a0
Move to procedural API
2015-07-29 16:59:53 -04:00
Daniel Lowrey
1d9d572ee5
promise updates are no longer variadic + misc formatting
2015-07-27 10:08:02 -04:00
Daniel Lowrey
38b3fbbbbb
move PromiseStream functionality into Amp\stream()
2015-07-23 15:23:45 -04:00
Daniel Lowrey
e18b090902
use fully qualified namespace for global functions
2015-07-23 01:32:52 -04:00
Daniel Lowrey
55e379e332
Rollback static coroutine methods to namespaced functions
2015-07-23 01:30:53 -04:00
Daniel Lowrey
a4636851d6
remove deprecated functions
2015-07-22 14:49:40 -04:00
Daniel Lowrey
7335cb2517
use explicit FQDN for compile time optimizations
2015-07-22 13:54:29 -04:00
Daniel Lowrey
09e000a6d7
allow nested tick
2015-07-22 13:12:21 -04:00
Daniel Lowrey
1fa9771dde
update coverage ignore
2015-07-22 13:12:14 -04:00
Daniel Lowrey
505c59d0e3
minor cleanup
2015-07-22 12:34:42 -04:00
Daniel Lowrey
f6be176a07
cleanup + tests
2015-07-22 11:38:17 -04:00
Daniel Lowrey
cdc5fecd47
Remove Streamable interface
2015-07-22 00:10:09 -04:00
Daniel Lowrey
79a33c09fe
misc + testing
2015-07-21 23:59:20 -04:00
Daniel Lowrey
2cea028b1c
filter() updates and tests
2015-07-21 20:09:27 -04:00
Daniel Lowrey
33fd20acb3
add tests
2015-07-21 17:25:18 -04:00
Daniel Lowrey
dcab6907c0
minor cleanup
2015-07-21 17:25:11 -04:00
Daniel Lowrey
d6b674b93b
Move coroutine functions into new Coroutine class
2015-07-21 16:14:50 -04:00
Daniel Lowrey
564a81c519
misc updates + tests
2015-07-21 12:25:34 -04:00
Daniel Lowrey
c8bbf8208f
misc updates
2015-07-20 22:40:06 -04:00
Daniel Lowrey
0e6560070b
misc updates and tests
2015-07-20 22:27:11 -04:00
Daniel Lowrey
10037fe859
Miscellaneous reactor cleanup
2015-07-20 15:42:56 -04:00
Daniel Lowrey
288530d296
Add EvReactor
2015-07-20 15:42:42 -04:00
Daniel Lowrey
28154b4d70
Fix missing stream property assignment
2015-07-19 13:53:26 -04:00
Daniel Lowrey
d8a0c147e6
Add manual watcher refcount manipulation methods
2015-07-10 15:36:13 -04:00
Daniel Lowrey
4d4e9bad32
Replace BaseException refs with Throwable
2015-07-07 10:15:57 -04:00
Daniel Lowrey
ad96a584d5
Check coroutine nesting level before incurring "next tick" overhead
2015-06-16 12:08:24 -04:00
Daniel Lowrey
c7d0f3f86e
error traceback improvement
2015-06-16 11:10:53 -04:00
Daniel Lowrey
40fbb6e16d
Minor coroutine refactoring/optimization; add makeGeneratorError()
2015-06-16 10:59:44 -04:00
Daniel Lowrey
1d777c7e3e
Remove custom coroutine promisifier support
2015-06-15 17:53:58 -04:00
Markus Staab
f06f803e76
fixed code to adhere to the phpdoc'ed description
2015-06-15 17:47:02 -04:00
Daniel Lowrey
1a891f54ac
Remove streamable support in coroutine resolution
2015-06-15 13:17:27 -04:00
Daniel Lowrey
57c0f222ea
Support extended generator error debugging output in PHP7
2015-06-15 11:56:42 -04:00
Daniel Lowrey
deedb4a7fa
minor coroutine optimization to avoid extra valid() fcall
2015-06-15 10:58:24 -04:00
Bob Weinand
298357f760
We need to check for Generator::getReturn() in ≥ PHP 7
2015-06-13 18:37:04 +02:00
Daniel Lowrey
8a8930c8fd
Fix exception breakage across 5.x/7 environments
2015-06-11 15:22:14 -04:00
Daniel Lowrey
7ce6734976
Fix potential illegal offset access
2015-06-10 15:32:02 -04:00
Bob Weinand
80fb080470
I/O watchers must be always cleared, even if disabled
...
Not clearing I/O watcher lead to a leftover disabled watcher, so that streamIdPollMap still contains a disabled watcher with the flag.
Which may lead to a new watcher of same type not triggering an uv_poll_start().
2015-06-10 20:10:33 +02:00
Daniel Lowrey
f2a0488d87
Add Amp\promises() to coalesce values/promises/promisors to promises
2015-06-09 11:49:22 -04:00
Daniel Lowrey
1ac3d96d24
Remove Exception hint because it breaks on PHP7 BaseException
2015-06-08 15:11:17 -04:00
Daniel Lowrey
e923ea3fde
minor timeout function/test cleanup
2015-05-31 20:18:42 -04:00
Daniel Lowrey
34088cbf52
Add timeout() function
2015-05-31 20:13:39 -04:00
Daniel Lowrey
905d5bfc2c
update docblock
2015-05-31 19:51:09 -04:00
Daniel Lowrey
954eaabcf5
Make promise updates variadic (ugly)
2015-05-31 19:33:55 -04:00
Daniel Lowrey
48d8aaf0e5
Correctly clear UvReactor once() watchers
2015-05-31 12:06:25 -04:00
Daniel Lowrey
31f21da9e9
Improve Deferred performance switching
2015-05-27 22:03:08 -04:00
Daniel Lowrey
0c4f04c6ab
Fix missing parameter if coroutine invoked without args
2015-05-27 18:33:57 -04:00
Bob Weinand
6c440b2797
Fix fatal error upon wrong key type
2015-05-27 23:36:22 +02:00
Daniel Lowrey
05e3ecc423
Fix bug incorrectly clearing repeat watcher when disabled
2015-05-26 03:03:32 -04:00
Daniel Lowrey
5e7d6ff095
Fix coroutine fatal if initial advance errored
2015-05-25 12:51:50 -04:00
Daniel Lowrey
0c0395f7a0
Fix UvReactor bugs
2015-05-25 12:47:04 -04:00
Daniel Lowrey
f024061d22
Fix buggy PromiseStream behavior
2015-05-23 16:46:55 -04:00
Daniel Lowrey
35a601964e
don't use 0b constant values because bitwise comparisons aren't used
2015-05-20 21:28:34 -04:00
Daniel Lowrey
e8ac57db31
make function name consistent with others
2015-05-20 20:09:30 -04:00
Daniel Lowrey
29cde175b3
Minor coroutine resolution updates
2015-05-20 19:51:03 -04:00
Daniel Lowrey
c86d6cc930
don't swallow caught exception
2015-05-20 18:29:45 -04:00
Daniel Lowrey
0255049bbb
Don't use php7 ReflectionGenerator in PHP5.x branch
2015-05-20 18:19:23 -04:00
Daniel Lowrey
e6f1386b31
Fix double promisor resolve under error condition
2015-05-20 18:16:42 -04:00
Daniel Lowrey
71f9687cff
Reactor watcher option "callback_data" renamed "cb_data"
2015-05-20 15:21:59 -04:00
Daniel Lowrey
c7e4e8d0c3
Miscellaneous function changes (more after jump)
...
- Combinator functions optimized for performance
- Amp\reactor() now accepts an optional assignment parameter for
modifying the global default event reactor instance to allow for
third-party Reactor implementations.
- Renamed functions:
. Amp\getReactor() -> Amp\reactor()
- Removed functions:
. Amp\chooseReactor()
. Amp\tick()
. Amp\immediately()
. Amp\once()
. Amp\repeat()
. Amp\onReadable()
. Amp\onWritable()
. Amp\onSignal()
. Amp\enable()
. Amp\disable()
. Amp\cancel()
2015-05-20 15:18:30 -04:00
Daniel Lowrey
9fa6010f19
Optimize non-promise pipe() case
2015-05-19 23:12:32 -04:00
Daniel Lowrey
c8d6a0b5b3
Optimize coroutine resolution for performance
2015-05-19 23:07:29 -04:00
Daniel Lowrey
fc600d46ab
Pass optional data parameter to when/watch callbacks
2015-05-19 18:49:38 -04:00
Daniel Lowrey
879b1229d1
Minor PromiseStream fixes
2015-05-19 16:20:53 -04:00
Daniel Lowrey
ca82ac5362
Fix NativeReactor bug breaking tick sleep timing
2015-05-19 16:13:53 -04:00
Daniel Lowrey
44d52cdf2f
Rename AMP_DEBUG -> AMP_PRODUCTION_MODE
2015-05-19 14:56:22 -04:00
Daniel Lowrey
de905a6104
Correct Pause implementation for use with new trait system
2015-05-19 14:10:53 -04:00
Daniel Lowrey
7e16326871
remove scalar typehint from 5.x-compatible code
2015-05-19 14:05:41 -04:00
Daniel Lowrey
e3e01c993c
Add Amp\Streamable interface for buffered generator resolution
2015-05-19 12:03:26 -04:00
Daniel Lowrey
2a0486cb3c
Add Amp\pipe() function to pipe eventual results through a functor
2015-05-19 11:31:01 -04:00
Daniel Lowrey
30245d6817
Add optional callback data param in Deferred::__construct()
2015-05-19 11:16:04 -04:00
Daniel Lowrey
1ed5e69c52
Move buffering to PromiseStream for custom behavior in extended instances
2015-05-19 01:09:23 -04:00
Daniel Lowrey
68719d8023
Unresolved -> PrivatePlaceholder
2015-05-19 00:29:27 -04:00
Daniel Lowrey
953c4612e6
Future -> Deferred
2015-05-19 00:21:33 -04:00
Daniel Lowrey
3af013d418
Expose boolean AMP_DEBUG for performance tuning
...
Amp Future instances double both as Promisor and Promise
implementations when AMP_DEBUG is defined and set to false.
This switch allows private Promise resolution safety by
default at the expense of performance.
Amp applications should set AMP_DEBUG to false in production
environments to maximize performance.
2015-05-18 23:57:34 -04:00
Daniel Lowrey
0973bba5ef
Add PromiseStream to stream Promise updates without callback hell
2015-05-18 17:39:09 -04:00
Daniel Lowrey
02e85b29c6
Fix high cpu usage in timer loop from broken "nextTimerAt" caching
2015-05-18 11:40:09 -04:00
Daniel Lowrey
aa27ab7a10
Fixed bug causing every NativeReactor tick to last one second (lol)
2015-05-17 19:52:41 -04:00
Daniel Lowrey
631a6089d9
Resolve correct Success arg in empty any\(\) combinator
2015-05-15 15:59:57 -04:00
Daniel Lowrey
93eb8ad8de
Suggest nearby property name in Struct error messages
2015-05-13 10:05:56 -04:00
Daniel Lowrey
2c3a3e65bd
Add offending generator key to coroutine resolution error messages
2015-05-13 01:15:35 -04:00
Daniel Lowrey
4a45502ae9
Correctly update nextTimerAt timestamp for repeat watchers
2015-05-10 02:36:39 -04:00
Daniel Lowrey
ed6084c333
Fix incorrect additional increment
2015-05-10 00:54:02 -04:00
Daniel Lowrey
cddb8e9f08
Backport API changes to 5.5+ compat
2015-05-04 12:48:29 -04:00
Daniel Lowrey
b9819d85b4
kill reference to removed function
2015-04-29 13:45:06 -04:00
Daniel Lowrey
06981ab6ea
fix bad anon class syntax
2015-04-29 11:24:26 -04:00
Daniel Lowrey
1565e23d46
replace call_user_func() reference
2015-04-27 14:33:41 -04:00
Daniel Lowrey
7cb09edf29
Use anonymous classes
2015-04-27 14:33:17 -04:00
Daniel Lowrey
446eded441
Remove superfluous parameter
2015-04-27 14:30:07 -04:00
Daniel Lowrey
60f1b4484e
update docblock
2015-04-03 12:52:17 -04:00
Daniel Lowrey
812e1fb6b4
Reactor API updates, NativeReactor refactor
2015-04-03 11:56:16 -04:00
Daniel Lowrey
2aa4c0c357
Remove libevent reactor until pecl/libevent supports php7
2015-04-03 11:55:23 -04:00
Daniel Lowrey
b57f6eb6bf
Add explanatory comment
2015-03-28 10:05:09 -04:00
Daniel Lowrey
fa080b66aa
Remove superfluous is_object() check
2015-03-28 10:03:27 -04:00
Daniel Lowrey
9a1581c91d
Bind local vars to closure
2015-03-25 14:17:26 -04:00
Daniel Lowrey
654e82f277
minor cleanup
2015-03-23 11:07:40 -04:00
Daniel Lowrey
6375cdd522
Minor documentation rewording
2015-03-19 12:01:09 -04:00
Daniel Lowrey
abd5d34d92
Remove deprecated ReactorFactory
2015-03-19 11:59:20 -04:00
Daniel Lowrey
203855d22c
minor docblock update
2015-03-19 11:39:57 -04:00
Daniel Lowrey
d1b919d9fc
Avoid extra Closure instantiation in PrivateFuture
2015-03-19 11:39:38 -04:00
Daniel Lowrey
68185a6cf1
Promisor::update() now accepts variadic args
2015-03-19 11:26:56 -04:00
Daniel Lowrey
cd84401b6f
Remove superfluous Reactor::at() method
2015-03-19 11:19:19 -04:00
Daniel Lowrey
af2335cf50
Remove deprecated wait functionality
2015-03-19 11:17:50 -04:00
Daniel Lowrey
16be668192
Add scalar types, update docblocks
2015-03-19 11:15:07 -04:00
Daniel Lowrey
620f798b13
Add new Pause promise
2015-03-18 14:05:27 -04:00