Index: /trunk/processor/hashtable.m4
===================================================================
--- /trunk/processor/hashtable.m4	(revision 50)
+++ /trunk/processor/hashtable.m4	(revision 58)
@@ -75,5 +75,11 @@
 
 #if defined(HARDENING_PATCH_HASH_PROTECT) && HARDENING_PATCH_HASH_PROTECT
-		DISPATCH(unsigned int, canary)
+		IFASM(`dst->canary = zend_hash_canary; DONE(canary)', `
+		dnl elseif
+			IFRESTORE(`dst->canary = zend_hash_canary; DONE(canary)', `
+				dnl else
+				DISPATCH(unsigned int, canary)
+			')
+		')
 #endif
 		DISPATCH(uint, nTableSize)
Index: /trunk/processor/head.m4
===================================================================
--- /trunk/processor/head.m4	(revision 56)
+++ /trunk/processor/head.m4	(revision 58)
@@ -15,4 +15,8 @@
 #include "stack.h"
 #include "xcache_globals.h"
+
+#if defined(HARDENING_PATCH_HASH_PROTECT) && HARDENING_PATCH_HASH_PROTECT
+extern unsigned int zend_hash_canary;
+#endif
 
 define(`SIZEOF_zend_uint', `sizeof(zend_uint)')
