fn infer_request_id()

in src/execute.rs [308:333]


fn infer_request_id(execute_data: &mut ExecuteData) -> Option<i64> {
    if !IS_SWOOLE.load(Ordering::Relaxed) {
        return None;
    }

    let mut prev_execute_data_ptr = execute_data.as_mut_ptr();
    loop {
        let prev_execute_data = (unsafe { ExecuteData::try_from_mut_ptr(prev_execute_data_ptr) })?;
        let func_name = prev_execute_data.func().get_function_name();
        if !func_name
            .map(|s| s == &HACK_SWOOLE_ON_REQUEST_FUNCTION_NAME.as_bytes())
            .unwrap_or_default()
        {
            prev_execute_data_ptr = unsafe { (*prev_execute_data_ptr).prev_execute_data };
            continue;
        }
        let request = prev_execute_data.get_mut_parameter(0).as_mut_z_obj()?;
        match request.get_mut_property("fd").as_long() {
            Some(fd) => return Some(fd),
            None => {
                error!("infer request id failed");
                return None;
            }
        }
    }
}