From: Tim Starling <tstarling@wikimedia.org>
Date: Wed, 14 Dec 2022 14:28:16 +1100
Subject: PHP 8.2 support

Change-Id: I1abca32237acb70ca20ffa7b4418e2e86b19a02c
---
 excimer_timer.c | 8 +++++++-
 excimer_timer.h | 4 ++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/excimer_timer.c b/excimer_timer.c
index ea82584..4acdc3c 100644
--- a/excimer_timer.c
+++ b/excimer_timer.c
@@ -22,6 +22,12 @@
 #include "php.h"
 #include "excimer_timer.h"
 
+#if PHP_VERSION_ID >= 80200
+#define excimer_timer_atomic_bool_store(dest, value) zend_atomic_bool_store(dest, value)
+#else
+#define excimer_timer_atomic_bool_store(dest, value) *dest = value
+#endif
+
 excimer_timer_globals_t excimer_timer_globals;
 ZEND_TLS excimer_timer_tls_t excimer_timer_tls;
 
@@ -292,7 +298,7 @@ static void excimer_timer_handle(union sigval sv)
 	} else {
 		Z_LVAL_P(zp_event_count) += event_count;
 	}
-	*timer->vm_interrupt_ptr = 1;
+	excimer_timer_atomic_bool_store(timer->vm_interrupt_ptr, 1);
 	/* Release the mutexes */
 	excimer_mutex_unlock(timer->thread_mutex_ptr);
 	excimer_mutex_unlock(&excimer_timer_globals.mutex);
diff --git a/excimer_timer.h b/excimer_timer.h
index 22da41d..ca2ff24 100644
--- a/excimer_timer.h
+++ b/excimer_timer.h
@@ -33,7 +33,11 @@ typedef struct _excimer_timer {
 	int is_running;
 
 	/** &EG(vm_interrupt) in the relevant thread */
+#if PHP_VERSION_ID >= 80200
+	zend_atomic_bool *vm_interrupt_ptr;
+#else
 	zend_bool *vm_interrupt_ptr;
+#endif
 
 	/** A unique ID identifying this object. These IDs are never reused, so that
 	 * the ID can be used to identify events received for deleted objects. The
