@@ -21,7 +21,7 @@ typedef struct php_process_handle php_process_handle;
21
21
/* popen stream handler close interception */
22
22
23
23
static int dd_php_stdiop_close_wrapper (php_stream * stream , int close_handle );
24
- static bool dd_waitpid (ddtrace_span_data * , php_process_id_t );
24
+ static void dd_waitpid (ddtrace_span_data * , php_process_id_t );
25
25
26
26
ZEND_TLS HashTable * tracked_streams ; // php_stream => span
27
27
static zend_string * cmd_exit_code_zstr ;
@@ -110,15 +110,15 @@ static int le_proc;
110
110
static int le_proc_span ;
111
111
112
112
static void dd_proc_wrapper_rsrc_dtor (zend_resource * rsrc ) {
113
- // this is called from the begginning of proc_open_rsrc_dtor,
113
+ // this is called from the beginning of proc_open_rsrc_dtor,
114
114
// before the process is possibly reaped
115
115
116
116
dd_proc_span * proc_span = (dd_proc_span * )rsrc -> ptr ;
117
117
118
118
ddtrace_span_data * span_data = OBJ_SPANDATA (proc_span -> span );
119
119
120
120
if (span_data -> duration == 0 ) {
121
- ( void ) dd_waitpid (span_data , proc_span -> child );
121
+ dd_waitpid (span_data , proc_span -> child );
122
122
123
123
dd_trace_stop_span_time (span_data );
124
124
ddtrace_close_span_restore_stack (span_data );
@@ -128,10 +128,10 @@ static void dd_proc_wrapper_rsrc_dtor(zend_resource *rsrc) {
128
128
efree (proc_span );
129
129
}
130
130
131
- static bool /* reaped */ dd_waitpid (ddtrace_span_data * span_data , php_process_id_t pid ) {
131
+ static void dd_waitpid (ddtrace_span_data * span_data , php_process_id_t pid ) {
132
132
if (span_data -> duration ) {
133
133
// already closed
134
- return false ;
134
+ return ;
135
135
}
136
136
zend_array * meta = ddtrace_property_array (& span_data -> property_meta );
137
137
@@ -146,10 +146,13 @@ static bool /* reaped */ dd_waitpid(ddtrace_span_data *span_data, php_process_id
146
146
}
147
147
148
148
if (pid_res != pid ) {
149
- return false; // some other error. Probably the process is no more/not a child
149
+ return ; // 0 was returned (no changed status) or some error
150
+ // Probably the process is no more/not a child
150
151
}
151
152
153
+ bool exited = false;
152
154
if (WIFEXITED (wstatus )) {
155
+ exited = true;
153
156
wstatus = WEXITSTATUS (wstatus );
154
157
} else if (WIFSIGNALED (wstatus )) {
155
158
// wstatus is not modified!
@@ -160,18 +163,16 @@ static bool /* reaped */ dd_waitpid(ddtrace_span_data *span_data, php_process_id
160
163
zval has_signalled_zv ;
161
164
ZVAL_INTERNED_STR (& has_signalled_zv , has_signalled_zstr );
162
165
zend_hash_update (meta , error_message_zstr , & has_signalled_zv );
166
+ exited = true;
163
167
} // else !FG(pclose_wait) and it hasn't finished
164
168
165
- if (wstatus != -1 ) { // we matched one of the two branches above
169
+ if (exited ) {
166
170
zval zexit ;
167
171
ZVAL_LONG (& zexit , wstatus );
168
172
169
173
// set tag 'cmd.exit_code'
170
174
zend_hash_update (meta , cmd_exit_code_zstr , & zexit );
171
- return true;
172
175
}
173
-
174
- return false;
175
176
}
176
177
177
178
static PHP_FUNCTION (DDTrace_integrations_exec_proc_assoc_span ) {
0 commit comments