|
42 | 42 |
|
43 | 43 | <active>yes</active>
|
44 | 44 | </developer>
|
45 |
| - <date>2019-07-06</date> |
46 |
| - <time>15:00:00</time> |
| 45 | + <date>2019-07-16</date> |
| 46 | + <time>14:00:00</time> |
47 | 47 | <version>
|
48 |
| - <release>4.4.0</release> |
| 48 | + <release>4.4.1</release> |
49 | 49 | <api>4.0</api>
|
50 | 50 | </version>
|
51 | 51 | <stability>
|
|
54 | 54 | </stability>
|
55 | 55 | <license uri="http://www.apache.org/licenses/LICENSE-2.0.html">Apache2.0</license>
|
56 | 56 | <notes>
|
57 |
| - Backward incompatible changes |
58 |
| - --- |
59 |
| - |
60 |
| - - Consistent with `PHP` official, no longer supports `PHP7.0` (@matyhtf) |
61 |
| - - Remove the `Serialize` module, which is maintained in a separate [ext-serialize](https://github.com/swoole/ext-serialize) extension. Reason: Due to frequent changes to the `PHP` kernel, stability cannot be guaranteed |
62 |
| - - Remove the `PostgreSQL` module and maintain it in a separate [ext-postgresql](https://github.com/swoole/ext-postgresql) extension. Reason: `PostgreSQL` uses asynchronous ways in the kernel and lacks the necessary unit tests to guarantee quality |
63 |
| - - `Runtime::enableCoroutine` is no longer automatically compatible with the internal and external environment of the Coroutine. Once enabled, all blocking operations must be called in the Coroutine (@matyhtf) |
64 |
| - * Due to the introduction of the new `Coroutine\MySQL` client driver, the underlying design is more standardized, but there are some small downward incompatible changes |
65 |
| - * `Coroutine\MySQL->fetch/nextResult` is optimized for on-demand reads, which will trigger IO scheduling |
66 |
| - * When the `defer` attribute is on, the request of `statement` needs to use `statement->recv` to receive the response |
67 |
| - * When the `defer/fetch_mode` feature is enabled, if there is unreceived data, a new request will be banned |
68 |
| - * Unlike asynchronous, the `connected` attribute is no longer updated based on events in real time (It's not reliable) but is updated after the `IO` operation fails |
69 |
| - - `Coroutine\Http\Client->set_cookie_headers` no longer have key names (#2664) (@twose) |
70 |
| - |
71 |
| - Deprecated content |
72 |
| - --- |
73 |
| - |
74 |
| - - The `Buffer` module will be discarded. Reason: It is highly replaceable and has low usage. It can be replaced by `PHP` string or `fopen("memory")` |
75 |
| - - The `Lock` module will be discarded. Reason for discarding: There may be problems with locking in the Coroutine. You can use `Chan` to implement the Lock of the Coroutine version |
76 |
| - - Since async `stream_socket_pair` is introduced, it is recommended to enable the hook by flag `SWOOLE_HOOK_STREAM_FUNCTION` instead of `SWOOLE_HOOK_STREAM_SELECT` |
77 |
| - |
78 |
| - New features |
79 |
| - --- |
80 |
| - |
81 |
| - + Added `[Library](https://github.com/swoole/swoole-src/tree/master/library)`, using pure `PHP` to write kernel functions instead of `C/C++`, providing the following features |
82 |
| - + Added high quality `PHP` module `Coroutine\WaitGroup` (@twose) |
83 |
| - + Use the `PHP` code to implement the CURL hook, one-click to make the CURL non-blocking, currently the experimental feature, you need to call `Runtime::enableCoroutine(SWOOLE_HOOK_CURL)` to open (@matyhtf) (@Yurunsoft) |
84 |
| - + Use `PHP` code to implement `exec`/`shell_exec` of Coroutine version (#2657) (@Yurunsof) |
85 |
| - + When `RuntimeHook` is turned on, the function `array_walk`, `array_walk_recursive` will be replaced by the version of Swoole, which will solve the problem that the native function cannot be reentrant, but it will not be able to traverse object (@matyhtf) (@twose) |
86 |
| - + Added a new Coroutine Preemptive Scheduler to prevent the Coroutine from taking too long CPU time to cause other Coroutine to starve. Open the `swoole.enable_preemptive_scheduler = On` by `php.ini`. For details, see [preemptive_scheduler] ( Https://github.com/swoole/swoole-src/tree/master/tests/swoole_coroutine_scheduler/preemptive) (@shiguangqi) |
87 |
| - + Added `Timer::list()` to get `Timer\Iterator`, which can traverse all timers, `Timer\clearAll` clears all timers, `Timer\info(int $id)` gets timer information, ` Timer::stats()` gets the global timer status (#2498) (@twose) |
88 |
| - + Added two methods `getOption` and `setOption` for `Coroutine\Socket` (9d13c29) (@matyhtf) |
89 |
| - + Added `$master_pid` property and `shutdown` method to `Process\Pool` (a1d6eaa) (@matyhtf) |
90 |
| - + Added the 4th parameter of the constructor of `Process\Pool`, when true, the underlying layer will automatically create the Coroutine in the `onWorkerStart` callback (8ceb32cd) (@matyhtf) |
91 |
| - + Support non-blocking `stream_socket_pair` in Runtime hook (#2546) (@matyhtf) |
92 |
| - + Added `static_handler_locations` setting of `Http\Server` to set static file path (@matyhtf) |
93 |
| - + Added `Coroutine\Http\Client->setBasicAuth` method to automatically send `Authorization` header (#2542) (@hongbshi) |
94 |
| - + Added `Coroutine\Http2\Client->ping` method (40041f6) (@shiguangqi) |
95 |
| - + Added `task_use_object` (#2659) (aa01317) (@twose) |
96 |
| - |
97 | 57 | Enhancement
|
98 | 58 | ---
|
99 |
| - |
100 |
| - + New `Coroutine\MySQL\Client` driver (#2538) (@twose) |
101 |
| - + The underlying programming mode using `C++` and Coroutine (sync writing, async performance) |
102 |
| - + Support SSL connection (configure `['ssl' => true]` when connect) |
103 |
| - + Support request with large data (unlimited) |
104 |
| - + Support response with large data (unlimited) |
105 |
| - + Support `fetch` to read by line (now `fetch` is read on demand, data without fetch does not consume user memory) (#2106) |
106 |
| - + Support `nextResult` read on demand (ibid) |
107 |
| - + Optimized protocol parser |
108 |
| - + `date` related type decimal precision support |
109 |
| - + Error code and information are consistent with `PDO`/`mysqli` |
110 |
| - + `Coroutine\Redis` compatibility mode, enabled by `$redis->set(['compatibility_mode' => true])`, which can make the result of `hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore` consistent with phpredis (#2529) (@caohao-php) |
111 |
| - + Now `100K` Coroutine are allowed to exist at the same time by default (c69d320b) (@twose) |
112 |
| - + Support `bailout` (can exit the process correctly when a fatal error occurs in the Coroutine) (#2579) (@twose) |
113 |
| - + `Server` can display a friendly `400/404/503` when error occurred (@matyhtf) (f3f2be9d) |
114 |
| - + `Server` enable `reload_async` and `send_yield` by default (#2555) (9d4a4c47) (@matyhtf) |
115 |
| - + `Server->onFinish` callback is in Coroutine (@twose) |
116 |
| - + `Coroutine\Http\Client` enable `websocket_mask` by default |
117 |
| - (c02f4f85) (@twose) |
118 |
| - + Scheduling operation of `Channel` outside the Coroutine is no longer allowed (519b6043) (@twose) |
119 |
| - + `WebSocket\Server` will close the connection when the handshake fails (#2510) (@twose) |
120 |
| - + Under the `Linux`, the dead parent process will automatically send a signal to kill the child process (4b833a3d) (@matyhtf) |
121 |
| - + Memory optimization of `Socket->recv` (642a3552) (@twose) |
122 |
| - + Floating point calculation optimization (#2572) (@tangl163) |
123 |
| - + All built-in classes prohibit cloning/serializing/unseting-declared-properties (f9c974b8) (@twose) |
124 |
| - + `Server->bind` will generate a warning and return false when `uid` is more than `UINT32_MAX` |
125 |
| - + Support `PHP7.4` (#2506) (@twose) |
| 59 | + + Support send response with non-zero Content-length without body for HEAD request (#2690) (@matyhtf) |
| 60 | + + Support `Coroutine::getPcid` by a random cid (#2669) (@huanghantao) |
126 | 61 |
|
127 | 62 | Fixed
|
128 | 63 | ---
|
129 |
| - * Fixed `getProcess` of `Process\Pool` (#2522) (@matyhtf) |
130 |
| - * Fixed a bug that exceptions were ignored in some special cases (@twose) |
131 |
| - * Fixed memory leak by timer after `fork` process (8f3abee7) (@twose) |
132 |
| - * Fixed timezone on non-Linux systems (#2584) (@devnexen) |
133 |
| - * Fixed `enable_coroutine=false` + `task_enable_coroutine=true` (#2585) (@matyhtf) |
134 |
| - * Fixed Http2's trailer method can not output a empty value header (#2578) (@twose) |
135 |
| - * Fixed `Coroutine\Http\Client->setCookies` memory error in special cases (#2644) (@Yurunsoft) |
136 |
| - * Fixed #2639 (#2656) (@mabu233) |
137 |
| - * Fixed `arginfo_swoole_process_pool_getProcess` (#2658) (@mabu233) |
138 |
| - * Fixed `static_handler` does not support soft links (@matyhtf) |
139 |
| - * Fixed a bug (I don't know how to describe it) (22504dd4) (@matyhtf) |
140 |
| - * Fixed `Server->getClientInfo` error (#2639) (@matyhtf) |
141 |
| - * Fixed an illegal operation of the same Socket with multiple Coroutine operations (#2661) (@twose) |
142 |
| - * Fixed swoole_table iterator coredump (#2663) (@mabu233) |
143 |
| - |
144 |
| - Coroutine scheduler [?](https://wiki.swoole.com/wiki/page/1487.html) |
145 |
| - ---- |
146 |
| - + Added `Swoole\Coroutine\Scheduler` class as the entry for the `cli` script, replacing `go() + Swoole\Event::wait()` |
147 |
| - + Added `Swoole\Coroutine\Run` function to provide wrapper for `Swoole\Coroutine\Scheduler` |
148 |
| - - `go() + Swoole\Event::wait()` may be deprecated |
149 |
| - |
150 |
| - Internal |
151 |
| - --- |
152 |
| - + Continuous underlying code quality optimization work (@swoole) |
153 |
| - + More unit tests, and use the assertion library [swoole/assert] based on [webmozart/assert] (https://github.com/webmozart/assert) secondary development (https://github.com) /swoole/assert) (@twose) |
154 |
| - + Completely abolish the `Windows` support plan |
155 |
| - + `Coroutine\Http2\Client` refactor (f64874c3) (@matyhtf) |
156 |
| - + The faster callback function caller (@twose) |
157 |
| - |
158 |
| - Experimental content |
159 |
| - --- |
160 |
| - + May add `Coroutine\Server` and `Coroutine\Http\Server` in `5.0` |
| 64 | + * Fixed `SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER` (#2667) (@twose) |
| 65 | + * Fixed signal listener (#2675) (@matyhtf) |
| 66 | + * Fixed MySQL incompatibility changes (#2674) (@twose) |
| 67 | + * Fixed add event after server start (#2673) (@matyhtf) |
| 68 | + * Fixed `static_handler` can not decode url (#2676) (@twose) |
| 69 | + * Fixed task worker warning (#2689) (@Yurunsoft) |
| 70 | + * Fixed `Http\Request->rawContent` (#2682) (@twose) |
| 71 | + * Fixed invalid read when `Timer::clearAll` (6b0263b) (@matyhtf) |
| 72 | + * Fixed `Coroutine\Http\Client` send failed (432259d) (@twose) |
161 | 73 | </notes>
|
162 | 74 | <contents>
|
163 | 75 | <dir name="/">
|
|
705 | 617 | <file role="src" name="swoole_coroutine.cc" />
|
706 | 618 | <file role="src" name="swoole_coroutine.h" />
|
707 | 619 | <file role="src" name="swoole_coroutine_scheduler.cc" />
|
708 |
| - <file role="src" name="swoole_coroutine_scheduler.h" /> |
709 | 620 | <file role="src" name="swoole_coroutine_system.cc" />
|
710 | 621 | <file role="src" name="swoole_coroutine_system.h" />
|
711 | 622 | <file role="src" name="swoole_event.cc" />
|
|
980 | 891 | <file role="test" name="tests/swoole_coroutine/forbidden_case/invoke.phpt" />
|
981 | 892 | <file role="test" name="tests/swoole_coroutine/getContext.phpt" />
|
982 | 893 | <file role="test" name="tests/swoole_coroutine/getPcid.phpt" />
|
| 894 | + <file role="test" name="tests/swoole_coroutine/getPcid_by_random_cid.phpt.phpt" /> |
983 | 895 | <file role="test" name="tests/swoole_coroutine/gethostbyname.phpt" />
|
984 | 896 | <file role="test" name="tests/swoole_coroutine/iterator.phpt" />
|
985 | 897 | <file role="test" name="tests/swoole_coroutine/list_and_backtrace.phpt" />
|
|
1010 | 922 | <file role="test" name="tests/swoole_coroutine/user_coroutine.phpt" />
|
1011 | 923 | <file role="test" name="tests/swoole_coroutine/user_coroutine_2.phpt" />
|
1012 | 924 | <file role="test" name="tests/swoole_coroutine_scheduler/hook_flags.phpt" />
|
| 925 | + <file role="test" name="tests/swoole_coroutine_scheduler/hook_flags_2.phpt" /> |
1013 | 926 | <file role="test" name="tests/swoole_coroutine_scheduler/parallel.phpt" />
|
1014 | 927 | <file role="test" name="tests/swoole_coroutine_scheduler/preemptive/disable.phpt" />
|
1015 | 928 | <file role="test" name="tests/swoole_coroutine_scheduler/preemptive/disable2.phpt" />
|
|
1055 | 968 | <file role="test" name="tests/swoole_coroutine_wait_group/base.phpt" />
|
1056 | 969 | <file role="test" name="tests/swoole_coroutine_wait_group/empty.phpt" />
|
1057 | 970 | <file role="test" name="tests/swoole_coroutine_wait_group/logic.phpt" />
|
| 971 | + <file role="test" name="tests/swoole_event/add_after_server_start.phpt" /> |
1058 | 972 | <file role="test" name="tests/swoole_event/defer.phpt" />
|
1059 | 973 | <file role="test" name="tests/swoole_event/defer_with_sleep.phpt" />
|
1060 | 974 | <file role="test" name="tests/swoole_event/defer_without_io.phpt" />
|
|
1079 | 993 | <file role="test" name="tests/swoole_feature/cross_close/stream_by_server.phpt" />
|
1080 | 994 | <file role="test" name="tests/swoole_feature/full_duplex/client.phpt" />
|
1081 | 995 | <file role="test" name="tests/swoole_feature/full_duplex/socket.phpt" />
|
| 996 | + <file role="test" name="tests/swoole_feature/full_duplex/socket_ssl.phpt" /> |
1082 | 997 | <file role="test" name="tests/swoole_feature/full_duplex/websocket.phpt" />
|
1083 | 998 | <file role="test" name="tests/swoole_function/swoole_clear_dns_cache.phpt" />
|
1084 | 999 | <file role="test" name="tests/swoole_function/swoole_cpu_num.phpt" />
|
|
1187 | 1102 | <file role="test" name="tests/swoole_http_server/dispatch_mode_7.phpt" />
|
1188 | 1103 | <file role="test" name="tests/swoole_http_server/enable_coroutine.phpt" />
|
1189 | 1104 | <file role="test" name="tests/swoole_http_server/form_data_with_charset.phpt" />
|
| 1105 | + <file role="test" name="tests/swoole_http_server/head_method.phpt" /> |
1190 | 1106 | <file role="test" name="tests/swoole_http_server/https.phpt" />
|
1191 | 1107 | <file role="test" name="tests/swoole_http_server/issue_2360.phpt" />
|
1192 | 1108 | <file role="test" name="tests/swoole_http_server/large_url.phpt" />
|
|
1202 | 1118 | <file role="test" name="tests/swoole_http_server/static_handler.phpt" />
|
1203 | 1119 | <file role="test" name="tests/swoole_http_server/static_handler/locations.phpt" />
|
1204 | 1120 | <file role="test" name="tests/swoole_http_server/static_handler/relative_path.phpt" />
|
| 1121 | + <file role="test" name="tests/swoole_http_server/static_handler/urldecode.phpt" /> |
1205 | 1122 | <file role="test" name="tests/swoole_http_server/task/enable_coroutine.phpt" />
|
1206 | 1123 | <file role="test" name="tests/swoole_http_server/task/enable_coroutine_with_wrong_usage.phpt" />
|
1207 | 1124 | <file role="test" name="tests/swoole_http_server/task/use_object.phpt" />
|
1208 | 1125 | <file role="test" name="tests/swoole_http_server/too_many_special_chars_in_cookie.phpt" />
|
1209 | 1126 | <file role="test" name="tests/swoole_http_server/unixsocket.phpt" />
|
| 1127 | + <file role="test" name="tests/swoole_http_server/unixsocket2.phpt" /> |
1210 | 1128 | <file role="test" name="tests/swoole_http_server/unset_response_header.phpt" />
|
1211 | 1129 | <file role="test" name="tests/swoole_http_server/upload.phpt" />
|
1212 | 1130 | <file role="test" name="tests/swoole_http_server/uploadFile.phpt" />
|
1213 | 1131 | <file role="test" name="tests/swoole_http_server/upload_02.phpt" />
|
1214 | 1132 | <file role="test" name="tests/swoole_http_server/upload_03.phpt" />
|
| 1133 | + <file role="test" name="tests/swoole_http_server_coro/bug_2682.phpt" /> |
1215 | 1134 | <file role="test" name="tests/swoole_http_server_coro/error_404.phpt" />
|
1216 | 1135 | <file role="test" name="tests/swoole_http_server_coro/handle.phpt" />
|
1217 | 1136 | <file role="test" name="tests/swoole_http_server_coro/https.phpt" />
|
|
1283 | 1202 | <file role="test" name="tests/swoole_library/exec/shell_exec/1.phpt" />
|
1284 | 1203 | <file role="test" name="tests/swoole_library/object_pool/base.phpt" />
|
1285 | 1204 | <file role="test" name="tests/swoole_library/string_object/base.phpt" />
|
| 1205 | + <file role="test" name="tests/swoole_library/wait_group/normal.phpt" /> |
| 1206 | + <file role="test" name="tests/swoole_library/wait_group/timeout.phpt" /> |
1286 | 1207 | <file role="test" name="tests/swoole_mysql_coro/abandon_prepare_dtor.phpt" />
|
1287 | 1208 | <file role="test" name="tests/swoole_mysql_coro/aborted_clients.phpt" />
|
1288 | 1209 | <file role="test" name="tests/swoole_mysql_coro/another_coroutine.phpt" />
|
| 1210 | + <file role="test" name="tests/swoole_mysql_coro/bc_fetchAll.phpt" /> |
1289 | 1211 | <file role="test" name="tests/swoole_mysql_coro/bc_sync_properties.phpt" />
|
1290 | 1212 | <file role="test" name="tests/swoole_mysql_coro/big_data.phpt" />
|
1291 | 1213 | <file role="test" name="tests/swoole_mysql_coro/bug_0814.phpt" />
|
|
1498 | 1420 | <file role="test" name="tests/swoole_server/enable_coroutine.phpt" />
|
1499 | 1421 | <file role="test" name="tests/swoole_server/eof_protocol.phpt" />
|
1500 | 1422 | <file role="test" name="tests/swoole_server/eof_server.phpt" />
|
| 1423 | + <file role="test" name="tests/swoole_server/event/manager_start.phpt" /> |
| 1424 | + <file role="test" name="tests/swoole_server/event/manager_stop.phpt" /> |
| 1425 | + <file role="test" name="tests/swoole_server/event/shutdown.phpt" /> |
| 1426 | + <file role="test" name="tests/swoole_server/event/start.phpt" /> |
1501 | 1427 | <file role="test" name="tests/swoole_server/exist.phpt" />
|
1502 | 1428 | <file role="test" name="tests/swoole_server/force_reload.phpt" />
|
1503 | 1429 | <file role="test" name="tests/swoole_server/force_reload2.phpt" />
|
|
1544 | 1470 | <file role="test" name="tests/swoole_server/shutdown_in_master.phpt" />
|
1545 | 1471 | <file role="test" name="tests/swoole_server/shutdown_in_process.phpt" />
|
1546 | 1472 | <file role="test" name="tests/swoole_server/shutdown_with_base_mode.phpt" />
|
| 1473 | + <file role="test" name="tests/swoole_server/sigint_with_base.phpt" /> |
| 1474 | + <file role="test" name="tests/swoole_server/sigint_with_process.phpt" /> |
1547 | 1475 | <file role="test" name="tests/swoole_server/slow_client.phpt" />
|
1548 | 1476 | <file role="test" name="tests/swoole_server/ssl.phpt" />
|
1549 | 1477 | <file role="test" name="tests/swoole_server/ssl_verify_01.phpt" />
|
|
1660 | 1588 | <file role="test" name="tests/swoole_websocket_server/send_encode_async.phpt" />
|
1661 | 1589 | <file role="test" name="tests/template" />
|
1662 | 1590 | <file role="test" name="tests/test.sql" />
|
| 1591 | + <file role="src" name="thirdparty/boost/asm/combined.S" /> |
1663 | 1592 | <file role="src" name="thirdparty/boost/asm/jump_arm64_aapcs_elf_gas.S" />
|
1664 | 1593 | <file role="src" name="thirdparty/boost/asm/jump_arm64_aapcs_macho_gas.S" />
|
1665 | 1594 | <file role="src" name="thirdparty/boost/asm/jump_arm_aapcs_elf_gas.S" />
|
|
0 commit comments