@@ -133,6 +133,29 @@ int php_swoole_get_send_data(zval *zdata, char **str TSRMLS_DC)
133
133
return length ;
134
134
}
135
135
136
+ static sw_inline int php_swoole_check_task_param (int dst_worker_id TSRMLS_DC )
137
+ {
138
+ if (SwooleG .task_worker_num < 1 )
139
+ {
140
+ swoole_php_fatal_error (E_WARNING , "Task method cannot use, Please set task_worker_num." );
141
+ return SW_ERR ;
142
+ }
143
+
144
+ if (dst_worker_id >= SwooleG .task_worker_num )
145
+ {
146
+ swoole_php_fatal_error (E_WARNING , "worker_id must be less than serv->task_worker_num." );
147
+ return SW_ERR ;
148
+ }
149
+
150
+ if (!swIsWorker ())
151
+ {
152
+ swoole_php_fatal_error (E_WARNING , "The method can only be used in the worker process." );
153
+ return SW_ERR ;
154
+ }
155
+
156
+ return SW_OK ;
157
+ }
158
+
136
159
static zval * php_swoole_get_task_result (swEventData * task_result TSRMLS_DC )
137
160
{
138
161
zval * task_notify_data , * task_notify_unserialized_data ;
@@ -2504,52 +2527,31 @@ PHP_FUNCTION(swoole_server_taskwait)
2504
2527
php_serialize_data_t var_hash ;
2505
2528
2506
2529
double timeout = SW_TASKWAIT_TIMEOUT ;
2507
- long worker_id = -1 ;
2530
+ long dst_worker_id = -1 ;
2508
2531
2509
2532
if (SwooleGS -> start == 0 )
2510
2533
{
2511
2534
php_error_docref (NULL TSRMLS_CC , E_WARNING , "server is not running." );
2512
2535
RETURN_FALSE ;
2513
2536
}
2514
2537
2515
- if (swIsMaster ())
2516
- {
2517
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "cannot use task in master process." );
2518
- RETURN_FALSE ;
2519
- }
2520
-
2521
2538
if (zobject == NULL )
2522
2539
{
2523
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "Oz|dl" , & zobject , swoole_server_class_entry_ptr , & data , & timeout , & worker_id ) == FAILURE )
2540
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "Oz|dl" , & zobject , swoole_server_class_entry_ptr , & data , & timeout , & dst_worker_id ) == FAILURE )
2524
2541
{
2525
2542
return ;
2526
2543
}
2527
2544
}
2528
2545
else
2529
2546
{
2530
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|dl" , & data , & timeout , & worker_id ) == FAILURE )
2547
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|dl" , & data , & timeout , & dst_worker_id ) == FAILURE )
2531
2548
{
2532
2549
return ;
2533
2550
}
2534
2551
}
2535
2552
2536
- swServer * serv = swoole_get_object (zobject );
2537
-
2538
- if (SwooleG .task_worker_num < 1 )
2539
- {
2540
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "cannot use task. Please set task_worker_num." );
2541
- RETURN_FALSE ;
2542
- }
2543
-
2544
- if (worker_id >= SwooleG .task_worker_num )
2545
- {
2546
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "worker_id must be less than serv->task_worker_num" );
2547
- RETURN_FALSE ;
2548
- }
2549
-
2550
- if (SwooleWG .id >= serv -> worker_num )
2553
+ if (php_swoole_check_task_param (dst_worker_id TSRMLS_CC ) < 0 )
2551
2554
{
2552
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "cannot dispatch task in task worker." );
2553
2555
RETURN_FALSE ;
2554
2556
}
2555
2557
@@ -2612,11 +2614,11 @@ PHP_FUNCTION(swoole_server_taskwait)
2612
2614
//clear history task
2613
2615
while (read (efd , & notify , sizeof (notify )) > 0 );
2614
2616
2615
- if (swProcessPool_dispatch_blocking (& SwooleGS -> task_workers , & buf , (int * ) & worker_id ) >= 0 )
2617
+ if (swProcessPool_dispatch_blocking (& SwooleGS -> task_workers , & buf , (int * ) & dst_worker_id ) >= 0 )
2616
2618
{
2617
2619
task_notify_pipe -> timeout = timeout ;
2618
2620
int ret = task_notify_pipe -> read (task_notify_pipe , & notify , sizeof (notify ));
2619
- swWorker * worker = swProcessPool_get_worker (& SwooleGS -> task_workers , worker_id );
2621
+ swWorker * worker = swProcessPool_get_worker (& SwooleGS -> task_workers , dst_worker_id );
2620
2622
sw_atomic_fetch_sub (& worker -> tasking_num , 1 );
2621
2623
2622
2624
if (ret > 0 )
@@ -2641,7 +2643,7 @@ PHP_FUNCTION(swoole_server_task)
2641
2643
smart_str serialized_data = {0 };
2642
2644
php_serialize_data_t var_hash ;
2643
2645
2644
- long worker_id = -1 ;
2646
+ long dst_worker_id = -1 ;
2645
2647
2646
2648
if (SwooleGS -> start == 0 )
2647
2649
{
@@ -2651,34 +2653,21 @@ PHP_FUNCTION(swoole_server_task)
2651
2653
2652
2654
if (zobject == NULL )
2653
2655
{
2654
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "Oz|l" , & zobject , swoole_server_class_entry_ptr , & data , & worker_id ) == FAILURE )
2656
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "Oz|l" , & zobject , swoole_server_class_entry_ptr , & data , & dst_worker_id ) == FAILURE )
2655
2657
{
2656
2658
return ;
2657
2659
}
2658
2660
}
2659
2661
else
2660
2662
{
2661
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|l" , & data , & worker_id ) == FAILURE )
2663
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z|l" , & data , & dst_worker_id ) == FAILURE )
2662
2664
{
2663
2665
return ;
2664
2666
}
2665
2667
}
2666
2668
2667
- if (SwooleG .task_worker_num < 1 )
2668
- {
2669
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "Task method cannot use, Please set task_worker_num." );
2670
- RETURN_FALSE ;
2671
- }
2672
-
2673
- if (worker_id >= SwooleG .task_worker_num )
2674
- {
2675
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "worker_id must be less than serv->task_worker_num." );
2676
- RETURN_FALSE ;
2677
- }
2678
-
2679
- if (!swIsWorker ())
2669
+ if (php_swoole_check_task_param (dst_worker_id TSRMLS_CC ) < 0 )
2680
2670
{
2681
- php_error_docref (NULL TSRMLS_CC , E_WARNING , "The method can only be used in the worker process." );
2682
2671
RETURN_FALSE ;
2683
2672
}
2684
2673
@@ -2736,7 +2725,7 @@ PHP_FUNCTION(swoole_server_task)
2736
2725
2737
2726
smart_str_free (& serialized_data );
2738
2727
2739
- if (swProcessPool_dispatch (& SwooleGS -> task_workers , & buf , (int * ) & worker_id ) >= 0 )
2728
+ if (swProcessPool_dispatch (& SwooleGS -> task_workers , & buf , (int * ) & dst_worker_id ) >= 0 )
2740
2729
{
2741
2730
sw_atomic_fetch_add (& SwooleStats -> tasking_num , 1 );
2742
2731
RETURN_LONG (buf .info .fd );
0 commit comments