diff -d -urpN uClibc.2/libc/stdio/vdprintf.c uClibc.3/libc/stdio/vdprintf.c
--- uClibc.2/libc/stdio/vdprintf.c	2008-04-01 22:19:04.000000000 +0200
+++ uClibc.3/libc/stdio/vdprintf.c	2008-04-01 23:23:14.000000000 +0200
@@ -47,6 +47,8 @@ int vdprintf(int filedes, const char * _
 	__INIT_MBSTATE(&(f.__state));
 #endif /* __STDIO_MBSTATE */
 
+/* _vfprintf_internal doesn't do any locking, locking init is here
+ * only because of fflush_unlocked. TODO? */
 #ifdef __UCLIBC_HAS_THREADS__
 	f.__user_locking = 1;		/* Set user locking. */
 	__stdio_init_mutex(&f.__lock);
diff -d -urpN uClibc.2/libc/stdio/vsnprintf.c uClibc.3/libc/stdio/vsnprintf.c
--- uClibc.2/libc/stdio/vsnprintf.c	2008-04-01 22:21:05.000000000 +0200
+++ uClibc.3/libc/stdio/vsnprintf.c	2008-04-01 23:24:38.000000000 +0200
@@ -41,16 +41,13 @@ int vsnprintf(char *__restrict buf, size
 	__INIT_MBSTATE(&(f.__state));
 #endif /* __STDIO_MBSTATE */
 
-#ifdef __UCLIBC_HAS_THREADS__
-	f.__user_locking = 1;		/* Set user locking. */
-	__stdio_init_mutex(&f.__lock);
-#endif
 	f.__nextopen = NULL;
 
 	if (size > SIZE_MAX - (size_t) buf) {
 		size = SIZE_MAX - (size_t) buf;
 	}
 
+/* TODO: this comment seems to be wrong */
 	/* Set these last since __bufputc initialization depends on
 	 * __user_locking and only gets set if user locking is on. */
 	f.__bufstart = (unsigned char *) buf;
@@ -110,13 +107,9 @@ int vsnprintf(char *__restrict buf, size
 	__INIT_MBSTATE(&(f.f.__state));
 #endif /* __STDIO_MBSTATE */
 
-#ifdef __UCLIBC_HAS_THREADS__
-	f.f.__user_locking = 1;		/* Set user locking. */
-	__stdio_init_mutex(&f.f.__lock);
-#endif
 	f.f.__nextopen = NULL;
 
-	rv = _vfprintf_internal((FILE *) &f, format, arg);
+	rv = _vfprintf_internal(&f.f, format, arg);
 	if (size) {
 		if (f.bufpos == f.bufend) {
 			--f.bufpos;
@@ -195,10 +188,6 @@ int vsnprintf(char *__restrict buf, size
 	__INIT_MBSTATE(&(f.__state));
 #endif /* __STDIO_MBSTATE */
 
-#ifdef __UCLIBC_HAS_THREADS__
-	f.__user_locking = 1;		/* Set user locking. */
-	__stdio_init_mutex(&f.__lock);
-#endif
 	f.__nextopen = NULL;
 
 	rv = _vfprintf_internal(&f, format, arg);
diff -d -urpN uClibc.2/libc/stdio/vswprintf.c uClibc.3/libc/stdio/vswprintf.c
--- uClibc.2/libc/stdio/vswprintf.c	2008-04-01 22:23:26.000000000 +0200
+++ uClibc.3/libc/stdio/vswprintf.c	2008-04-01 23:09:14.000000000 +0200
@@ -38,10 +38,6 @@ int vswprintf(wchar_t *__restrict buf, s
 	__INIT_MBSTATE(&(f.__state));
 #endif /* __STDIO_MBSTATE */
 
-#ifdef __UCLIBC_HAS_THREADS__
-	f.__user_locking = 1;		/* Set user locking. */
-	__stdio_init_mutex(&f.__lock);
-#endif
 	f.__nextopen = NULL;
 
 	if (size > ((SIZE_MAX - (size_t) buf)/sizeof(wchar_t))) {
