diff options
author | Ulrich Drepper <drepper@gmail.com> | 2012-01-16 09:03:20 -0500 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2012-01-16 09:03:20 -0500 |
commit | 400aa020ea599b4319670a1cea7028930aeab588 (patch) | |
tree | 63a2fbf11faaf49a39433c2aa61c9f6bbd4d4af9 /stdlib | |
parent | e0a309cf2a59042718fa95f97c5c35da33e61650 (diff) | |
download | glibc-400aa020ea599b4319670a1cea7028930aeab588.zip glibc-400aa020ea599b4319670a1cea7028930aeab588.tar.gz glibc-400aa020ea599b4319670a1cea7028930aeab588.tar.bz2 |
Fix locking problem in fmtmsg
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/Makefile | 5 | ||||
-rw-r--r-- | stdlib/bug-fmtmsg1.c | 28 | ||||
-rw-r--r-- | stdlib/fmtmsg.c | 5 |
3 files changed, 35 insertions, 3 deletions
diff --git a/stdlib/Makefile b/stdlib/Makefile index 04c6ac5..f9bba3a 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2009, 2011 Free Software Foundation, Inc. +# Copyright (C) 1991-2009, 2011, 2012 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -71,7 +71,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \ tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \ tst-makecontext2 tst-strtod6 tst-unsetenv1 \ - tst-makecontext3 bug-getcontext + tst-makecontext3 bug-getcontext bug-fmtmsg1 include ../Makeconfig @@ -121,6 +121,7 @@ tst-strtod3-ENV = LOCPATH=$(common-objpfx)localedata tst-strtod4-ENV = LOCPATH=$(common-objpfx)localedata tst-strtod5-ENV = LOCPATH=$(common-objpfx)localedata testmb2-ENV = LOCPATH=$(common-objpfx)localedata +bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev # Run a test on the header files we use. tests: $(objpfx)isomac.out diff --git a/stdlib/bug-fmtmsg1.c b/stdlib/bug-fmtmsg1.c new file mode 100644 index 0000000..04bfaea --- /dev/null +++ b/stdlib/bug-fmtmsg1.c @@ -0,0 +1,28 @@ +#include <fmtmsg.h> +#include <stdio.h> + + +static int +do_test (void) +{ + /* Ugly, but fmtmsg would otherwise print to stderr which we do not + want. */ + fclose (stderr); + stderr = stdout; + + int e1; + e1 = fmtmsg (MM_PRINT, "label:part", MM_WARNING, "text", "action", "tag"); + + int e2; + e2 = fmtmsg (MM_PRINT, "label2:part2", 11, "text2", "action2", "tag2"); + + addseverity (10, "additional severity"); + + int e3; + e3 = fmtmsg (MM_PRINT, "label3:part3", 10, "text3", "action3", "tag3"); + + return e1 != 0 || e2 != 0 || e3 != 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c index 8ee06bf..d187bb2 100644 --- a/stdlib/fmtmsg.c +++ b/stdlib/fmtmsg.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1997,1999-2003,2005,2006,2011 Free Software Foundation, Inc. +/* Copyright (C) 1997,1999-2003,2005,2006,2011,2012 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -280,6 +281,8 @@ init (void) sevlevel_var = end + (*end == ':' ? 1 : 0); } + + __libc_lock_unlock (lock); } } |