Skip to content

Commit 59f74ea

Browse files
committed
fix issue with uv_loop_new based on 1.0 migration guide, add additional tests
1 parent 1ea6c5a commit 59f74ea

File tree

3 files changed

+72
-25
lines changed

3 files changed

+72
-25
lines changed

php_uv.c

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ zend_fcall_info empty_fcall_info = { 0, NULL, NULL, NULL, NULL, 0, NULL, NULL, 0
5656
RETURN_FALSE; \
5757
} \
5858
r = uv_timer_init(loop, &uv->uv.timer); \
59-
if (r < 0) { \
59+
if (r) { \
6060
php_error_docref(NULL TSRMLS_CC, E_WARNING, "uv_timer_init failed");\
6161
RETURN_FALSE;\
6262
} \
@@ -388,7 +388,7 @@ static inline int php_uv_common_init(php_uv_t **result, uv_loop_t *loop, enum ph
388388
case IS_UV_TCP:
389389
{
390390
r = uv_tcp_init(loop, &uv->uv.tcp);
391-
if (r < 0) {
391+
if (r) {
392392
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_tcp_init failed");
393393
goto cleanup;
394394
}
@@ -399,7 +399,7 @@ static inline int php_uv_common_init(php_uv_t **result, uv_loop_t *loop, enum ph
399399
case IS_UV_IDLE:
400400
{
401401
r = uv_idle_init(loop, &uv->uv.idle);
402-
if (r < 0) {
402+
if (r) {
403403
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_idle_init failed");
404404
goto cleanup;
405405
}
@@ -410,7 +410,7 @@ static inline int php_uv_common_init(php_uv_t **result, uv_loop_t *loop, enum ph
410410
case IS_UV_UDP:
411411
{
412412
r = uv_udp_init(loop, &uv->uv.udp);
413-
if (r < 0) {
413+
if (r) {
414414
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_udp_init failed");
415415
goto cleanup;
416416
}
@@ -421,7 +421,7 @@ static inline int php_uv_common_init(php_uv_t **result, uv_loop_t *loop, enum ph
421421
case IS_UV_PREPARE:
422422
{
423423
r = uv_prepare_init(loop, &uv->uv.prepare);
424-
if (r < 0) {
424+
if (r) {
425425
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_prepare_init failed");
426426
goto cleanup;
427427
}
@@ -432,7 +432,7 @@ static inline int php_uv_common_init(php_uv_t **result, uv_loop_t *loop, enum ph
432432
case IS_UV_CHECK:
433433
{
434434
r = uv_check_init(loop, &uv->uv.check);
435-
if (r < 0) {
435+
if (r) {
436436
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_check_init failed");
437437
goto cleanup;
438438
}
@@ -1117,7 +1117,10 @@ void static destruct_uv_loop(zend_rsrc_list_entry *rsrc TSRMLS_DC)
11171117
{
11181118
uv_loop_t *loop = (uv_loop_t *)rsrc->ptr;
11191119
if (loop != _php_uv_default_loop) {
1120-
uv_loop_delete(loop);
1120+
//uv_loop_delete(loop);
1121+
/* updated for libuv 1.0 as uv_loop_delete is deprecated */
1122+
uv_loop_close(loop);
1123+
efree(loop);
11211124
}
11221125
}
11231126

@@ -2408,7 +2411,7 @@ static void php_uv_socket_bind(enum php_uv_socket_type ip_type, INTERNAL_FUNCTIO
24082411
break;
24092412
}
24102413

2411-
if (r < 0) {
2414+
if (r) {
24122415
php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind failed");
24132416
RETURN_FALSE;
24142417
}
@@ -3530,7 +3533,10 @@ PHP_FUNCTION(uv_loop_delete)
35303533
PHP_UV_FETCH_UV_DEFAULT_LOOP(loop, zloop);
35313534

35323535
if (loop != _php_uv_default_loop) {
3533-
uv_loop_delete(loop);
3536+
//uv_loop_delete(loop);
3537+
/* uv_loop_delete deprecated with libuv 1.0 */
3538+
uv_loop_close(loop);
3539+
efree(loop);
35343540
}
35353541
}
35363542
/* }}} */
@@ -3604,7 +3610,7 @@ PHP_FUNCTION(uv_write)
36043610
PHP_UV_INIT_WRITE_REQ(w, uv, data, data_len)
36053611

36063612
r = uv_write(&w->req, (uv_stream_t*)php_uv_get_current_stream(uv), &w->buf, 1, php_uv_write_cb);
3607-
if (r < 0) {
3613+
if (r) {
36083614
php_error_docref(NULL TSRMLS_CC, E_WARNING, "write failed");
36093615
}
36103616

@@ -3644,7 +3650,7 @@ PHP_FUNCTION(uv_write2)
36443650
PHP_UV_INIT_WRITE_REQ(w, uv, data, data_len)
36453651

36463652
r = uv_write2(&w->req, (uv_stream_t*)php_uv_get_current_stream(uv), &w->buf, 1, (uv_stream_t*)php_uv_get_current_stream(send), php_uv_write_cb);
3647-
if (r < 0) {
3653+
if (r) {
36483654
php_error_docref(NULL TSRMLS_CC, E_ERROR, "write2 failed");
36493655
}
36503656

@@ -3697,7 +3703,7 @@ PHP_FUNCTION(uv_accept)
36973703
}
36983704

36993705
r = uv_accept((uv_stream_t *)php_uv_get_current_stream(server), (uv_stream_t *)php_uv_get_current_stream(client));
3700-
if (r < 0) {
3706+
if (r) {
37013707
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", php_uv_strerror(r));
37023708
RETURN_FALSE;
37033709
}
@@ -3738,7 +3744,7 @@ PHP_FUNCTION(uv_shutdown)
37383744
shutdown->data = uv;
37393745

37403746
r = uv_shutdown(shutdown, (uv_stream_t*)php_uv_get_current_stream(uv), (uv_shutdown_cb)php_uv_shutdown_cb);
3741-
if (r < 0) {
3747+
if (r) {
37423748
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", php_uv_strerror(r));
37433749
}
37443750

@@ -3833,7 +3839,7 @@ PHP_FUNCTION(uv_read_start)
38333839
php_uv_cb_init(&cb, uv, &fci, &fcc, PHP_UV_READ_CB);
38343840

38353841
r = uv_read_start((uv_stream_t*)php_uv_get_current_stream(uv), php_uv_read_alloc, php_uv_read_cb);
3836-
if (r < 0) {
3842+
if (r) {
38373843
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "read failed");
38383844
}
38393845
PHP_UV_DEBUG_RESOURCE_REFCOUNT(uv_read_start, uv->resource_id);
@@ -3844,6 +3850,9 @@ PHP_FUNCTION(uv_read_start)
38443850
*/
38453851
PHP_FUNCTION(uv_read2_start)
38463852
{
3853+
/* TODO: determine how to make this backwards compatible? */
3854+
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_read2_start is no longer supported.");
3855+
/*
38473856
zval *client;
38483857
php_uv_t *uv;
38493858
int r;
@@ -3879,10 +3888,11 @@ PHP_FUNCTION(uv_read2_start)
38793888
38803889
php_uv_cb_init(&cb, uv, &fci, &fcc, PHP_UV_READ2_CB);
38813890
r = uv_read2_start((uv_stream_t*)php_uv_get_current_stream(uv), php_uv_read_alloc, php_uv_read2_cb);
3882-
if (r < 0) {
3891+
if (r) {
38833892
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "read2 failed");
38843893
}
38853894
PHP_UV_DEBUG_RESOURCE_REFCOUNT(uv_read2_start, uv->resource_id);
3895+
*/
38863896
}
38873897
/* }}} */
38883898

@@ -3991,7 +4001,7 @@ PHP_FUNCTION(uv_listen)
39914001
php_uv_cb_init(&cb, uv, &fci, &fcc, PHP_UV_LISTEN_CB);
39924002

39934003
r = uv_listen((uv_stream_t*)php_uv_get_current_stream(uv), backlog, php_uv_listen_cb);
3994-
if (r < 0) {
4004+
if (r) {
39954005
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", php_uv_strerror(r));
39964006
}
39974007
}
@@ -4342,9 +4352,11 @@ PHP_FUNCTION(uv_default_loop)
43424352
*/
43434353
PHP_FUNCTION(uv_loop_new)
43444354
{
4345-
uv_loop_t *loop;
4355+
uv_loop_t *loop = emalloc(sizeof(*loop));
4356+
uv_loop_init(loop);
43464357

4347-
loop = uv_loop_new();
4358+
//loop = uv_loop_new();
4359+
43484360
ZEND_REGISTER_RESOURCE(return_value, loop, uv_loop_handle);
43494361
}
43504362
/* }}} */
@@ -4413,7 +4425,7 @@ PHP_FUNCTION(uv_udp_recv_start)
44134425

44144426
php_uv_cb_init(&cb, uv, &fci, &fcc, PHP_UV_RECV_CB);
44154427
r = uv_udp_recv_start((uv_udp_t*)&uv->uv.udp, php_uv_read_alloc, php_uv_udp_recv_cb);
4416-
if (r < 0) {
4428+
if (r) {
44174429
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "read failed");
44184430
}
44194431
}
@@ -4485,7 +4497,7 @@ PHP_FUNCTION(uv_udp_set_multicast_loop)
44854497
PHP_UV_TYPE_CHECK(uv, IS_UV_UDP);
44864498

44874499
r = uv_udp_set_multicast_loop((uv_udp_t*)&uv->uv.udp, enabled);
4488-
if (r < 0) {
4500+
if (r) {
44894501
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "uv_udp_set_muticast_loop failed");
44904502
}
44914503
}
@@ -4517,7 +4529,7 @@ PHP_FUNCTION(uv_udp_set_multicast_ttl)
45174529
}
45184530

45194531
r = uv_udp_set_multicast_ttl((uv_udp_t*)&uv->uv.udp, ttl);
4520-
if (r < 0) {
4532+
if (r) {
45214533
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "uv_udp_set_muticast_ttl failed");
45224534
}
45234535
}
@@ -4541,7 +4553,7 @@ PHP_FUNCTION(uv_udp_set_broadcast)
45414553
PHP_UV_TYPE_CHECK(uv, IS_UV_UDP);
45424554

45434555
r = uv_udp_set_broadcast((uv_udp_t*)&uv->uv.udp, enabled);
4544-
if (r < 0) {
4556+
if (r) {
45454557
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "uv_udp_set_muticast_loop failed");
45464558
}
45474559
}
@@ -4715,7 +4727,7 @@ PHP_FUNCTION(uv_pipe_init)
47154727
uv->type = IS_UV_PIPE;
47164728
r = uv_pipe_init(loop, &uv->uv.pipe, (int)ipc);
47174729

4718-
if (r < 0) {
4730+
if (r) {
47194731
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_pipe_init failed");
47204732
return;
47214733
}
@@ -5671,7 +5683,7 @@ PHP_FUNCTION(uv_async_init)
56715683
PHP_UV_INIT_UV(uv, IS_UV_ASYNC);
56725684

56735685
r = uv_async_init(loop, &uv->uv.async, php_uv_async_cb);
5674-
if (r < 0) {
5686+
if (r) {
56755687
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_async_init failed");
56765688
return;
56775689
}
@@ -5732,7 +5744,7 @@ PHP_FUNCTION(uv_queue_work)
57325744

57335745
r = uv_queue_work(loop, (uv_work_t*)&uv->uv.work, php_uv_work_cb, php_uv_after_work_cb);
57345746

5735-
if (r < 0) {
5747+
if (r) {
57365748
php_error_docref(NULL TSRMLS_CC, E_ERROR, "uv_queue_work failed");
57375749
return;
57385750
}

tests/010-uv_loop_new.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
Check to make sure uv_loop_new can be used
3+
--SKIPIF--
4+
<?php if(!extension_loaded("uv")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
$loop = uv_loop_new();
8+
$async = uv_async_init($loop, function($async) {
9+
echo "Hello";
10+
uv_close($async);
11+
});
12+
uv_async_send($async);
13+
uv_run($loop);
14+
--EXPECT--
15+
Hello

tests/330-poll-fd.phpt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Check poll functions with with non socket file descriptors
3+
--FILE--
4+
<?php
5+
$fd = fopen('php://temp', 'r+');
6+
stream_set_blocking($fd, 0);
7+
$loop = uv_loop_new();
8+
$poll = uv_poll_init($loop, $fd);
9+
uv_poll_start($poll, UV::READABLE, function($poll, $stat, $ev, $fd) {
10+
echo "OK";
11+
uv_poll_stop($poll);
12+
13+
fclose($fd);
14+
});
15+
uv_run($loop);
16+
17+
fwrite($fd, 'hello');
18+
19+
--EXPECT--
20+
OK

0 commit comments

Comments
 (0)