diff --git a/recipes/libxml/libxml2-2.9.0/pthread_once_init_fix.patch b/recipes/libxml/libxml2-2.9.0/pthread_once_init_fix.patch
new file mode 100644
index 0000000..847aa39
--- /dev/null
+++ b/recipes/libxml/libxml2-2.9.0/pthread_once_init_fix.patch
@@ -0,0 +1,20 @@
+diff -urN libxml2-2.9.0/threads.c libxml2-2.9.0.mod/threads.c
+--- libxml2-2.9.0/threads.c	2012-09-11 05:52:46.000000000 +0200
++++ libxml2-2.9.0.mod/threads.c	2012-10-17 18:00:08.000000000 +0200
+@@ -146,6 +146,7 @@
+ static pthread_key_t globalkey;
+ static pthread_t mainthread;
+ static pthread_once_t once_control = PTHREAD_ONCE_INIT;
++static pthread_once_t once_control_init = PTHREAD_ONCE_INIT;
+ static pthread_mutex_t global_init_lock = PTHREAD_MUTEX_INITIALIZER;
+ #elif defined HAVE_WIN32_THREADS
+ #if defined(HAVE_COMPILER_TLS)
+@@ -915,7 +916,7 @@
+ #ifdef HAVE_PTHREAD_H
+     if ((libxml_is_threaded)  && (pthread_key_delete != NULL))
+         pthread_key_delete(globalkey);
+-    once_control = PTHREAD_ONCE_INIT;
++    once_control = once_control_init;
+ #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
+     if (globalkey != TLS_OUT_OF_INDEXES) {
+         xmlGlobalStateCleanupHelperParams *p;
diff --git a/recipes/libxml/libxml2_2.9.0.oe b/recipes/libxml/libxml2_2.9.0.oe
index 8c656f1..888a5af 100644
--- a/recipes/libxml/libxml2_2.9.0.oe
+++ b/recipes/libxml/libxml2_2.9.0.oe
@@ -1,3 +1,5 @@
 LICENSE = "MIT"
 
 require libxml2.inc
+
+SRC_URI += "file://pthread_once_init_fix.patch"
