diff --git a/src/header/pthread/mod.rs b/src/header/pthread/mod.rs
index f71244a6a88ca87246700c10b5cc55f56513e4f0..81e026ef70c4af59419fb0b92d551402fffa639d 100644
--- a/src/header/pthread/mod.rs
+++ b/src/header/pthread/mod.rs
@@ -145,7 +145,9 @@ pub use tls::*;
 pub unsafe extern "C" fn pthread_join(thread: pthread_t, retval: *mut *mut c_void) -> c_int {
     match pthread::join(&*thread.cast()) {
         Ok(pthread::Retval(ret)) => {
-            core::ptr::write(retval, ret);
+            if !retval.is_null() {
+                core::ptr::write(retval, ret);
+            }
             0
         }
         Err(pthread::Errno(error)) => error,