(obj: &PyObject)
| 5011 | |
| 5012 | #[cfg(all(unix, feature = "threading"))] |
| 5013 | fn reinit_io_locks(obj: &PyObject) { |
| 5014 | use crate::common::lock::reinit_thread_mutex_after_fork; |
| 5015 | |
| 5016 | if let Some(tio) = obj.downcast_ref::<TextIOWrapper>() { |
| 5017 | unsafe { reinit_thread_mutex_after_fork(&tio.data) }; |
| 5018 | if let Some(guard) = tio.data.lock() |
| 5019 | && let Some(ref data) = *guard |
| 5020 | { |
| 5021 | if let Some(ref decoder) = data.decoder { |
| 5022 | reinit_io_locks(decoder); |
| 5023 | } |
| 5024 | reinit_io_locks(&data.buffer); |
| 5025 | } |
| 5026 | return; |
| 5027 | } |
| 5028 | if let Some(nl) = obj.downcast_ref::<IncrementalNewlineDecoder>() { |
| 5029 | unsafe { reinit_thread_mutex_after_fork(&nl.data) }; |
| 5030 | return; |
| 5031 | } |
| 5032 | if let Some(br) = obj.downcast_ref::<BufferedReader>() { |
| 5033 | unsafe { reinit_thread_mutex_after_fork(&br.data) }; |
| 5034 | return; |
| 5035 | } |
| 5036 | if let Some(bw) = obj.downcast_ref::<BufferedWriter>() { |
| 5037 | unsafe { reinit_thread_mutex_after_fork(&bw.data) }; |
| 5038 | return; |
| 5039 | } |
| 5040 | if let Some(brw) = obj.downcast_ref::<BufferedRandom>() { |
| 5041 | unsafe { reinit_thread_mutex_after_fork(&brw.data) }; |
| 5042 | return; |
| 5043 | } |
| 5044 | if let Some(brw) = obj.downcast_ref::<BufferedRWPair>() { |
| 5045 | unsafe { reinit_thread_mutex_after_fork(&brw.read.data) }; |
| 5046 | unsafe { reinit_thread_mutex_after_fork(&brw.write.data) }; |
| 5047 | } |
| 5048 | } |
| 5049 | |
| 5050 | pub fn io_open( |
| 5051 | file: PyObjectRef, |
no test coverage detected