@@ -16,6 +16,44 @@ zend_refcounted *sw_get_refcount_ptr(zval *value) {
1616 return (sw_refcount_ptr = value->value .counted );
1717}
1818
19+ #ifdef HAVE_CPU_AFFINITY
20+ bool php_swoole_array_to_cpu_set (const zval *array, cpu_set_t *cpu_set) {
21+ if (php_swoole_array_length (array) == 0 ) {
22+ return false ;
23+ }
24+
25+ const zend_long cpu_num = SW_MIN ((zend_long) SW_CPU_NUM , (zend_long) CPU_SETSIZE );
26+ if ((zend_long) php_swoole_array_length (array) > cpu_num) {
27+ php_swoole_fatal_error (E_WARNING , " More than the number of CPU" );
28+ return false ;
29+ }
30+
31+ zval *value = nullptr ;
32+ CPU_ZERO (cpu_set);
33+
34+ SW_HASHTABLE_FOREACH_START (Z_ARRVAL_P (array), value)
35+ if (zval_get_long (value) < 0 || zval_get_long (value) >= cpu_num) {
36+ php_swoole_fatal_error (E_WARNING , " invalid cpu id [%d]" , (int ) Z_LVAL_P (value));
37+ return false ;
38+ }
39+ CPU_SET (Z_LVAL_P (value), cpu_set);
40+ SW_HASHTABLE_FOREACH_END ();
41+
42+ return true ;
43+ }
44+
45+ void php_swoole_cpu_set_to_array (zval *array, cpu_set_t *cpu_set) {
46+ array_init (array);
47+
48+ int cpu_n = SW_MIN (SW_CPU_NUM , CPU_SETSIZE );
49+ SW_LOOP_N (cpu_n) {
50+ if (CPU_ISSET (i, cpu_set)) {
51+ add_next_index_long (array, i);
52+ }
53+ }
54+ }
55+ #endif
56+
1957// ----------------------------------known string------------------------------------
2058namespace zend {
2159void known_strings_init () {
0 commit comments