Merge "[libgcc] Fix emutls.c to not leak pthread keys."
diff --git a/gcc-4.9/libgcc/emutls.c b/gcc-4.9/libgcc/emutls.c
index fd6d86e..77550e0 100644
--- a/gcc-4.9/libgcc/emutls.c
+++ b/gcc-4.9/libgcc/emutls.c
@@ -60,6 +60,7 @@
 static __gthread_mutex_t emutls_mutex;
 #endif
 static __gthread_key_t emutls_key;
+static int emutls_key_created = 0;
 static pointer emutls_size;
 
 static void
@@ -86,9 +87,18 @@
 #endif
   if (__gthread_key_create (&emutls_key, emutls_destroy) != 0)
     abort ();
+  emutls_key_created = 1;
 }
 #endif
 
+__attribute__((destructor))
+static void
+unregister_emutls_key (void)
+{
+  if (emutls_key_created)
+    __gthread_key_delete (emutls_key);
+}
+
 static void *
 emutls_alloc (struct __emutls_object *obj)
 {