Remove @synchronized from MTLFunction specialization to avoid reentrant hang.
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
index 0c0b3ed..55da1dc 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKShaderModule.mm
@@ -470,14 +470,12 @@
 	unique_lock<mutex> lock(_completionLock);
 
 	compile(lock, ^{
-		@synchronized (_owner->getMTLDevice()) {
-			[mtlLibrary newFunctionWithName: funcName
-							 constantValues: constantValues
-						  completionHandler: ^(id<MTLFunction> mtlFunc, NSError* error) {
-				bool isLate = compileComplete(mtlFunc, error);
-				if (isLate) { destroy(); }
-			}];
-		}
+		[mtlLibrary newFunctionWithName: funcName
+						 constantValues: constantValues
+					  completionHandler: ^(id<MTLFunction> mtlFunc, NSError* error) {
+			bool isLate = compileComplete(mtlFunc, error);
+			if (isLate) { destroy(); }
+		}];
 	});
 
 	return [_mtlFunction retain];