mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	[libpng16] Fixed race conditions in parallel make builds. With higher degrees
of parallelism during 'make' the use of the same temporary file names such as 'dfn*' can result in a race where a temporary file from one arm of the build is deleted or overwritten in another arm. This changes the temporary files for suffix rules to always use $* and ensures that the non-suffix rules use unique file names.
This commit is contained in:
		
							parent
							
								
									90a87c8853
								
							
						
					
					
						commit
						eb26ee6602
					
				
							
								
								
									
										10
									
								
								ANNOUNCE
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ANNOUNCE
									
									
									
									
									
								
							@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
Libpng 1.6.0alpha01 - December 5, 2011
 | 
			
		||||
Libpng 1.6.0alpha01 - December 8, 2011
 | 
			
		||||
 | 
			
		||||
This is not intended to be a public release.  It will be replaced
 | 
			
		||||
within a few weeks by a public version or by another test version.
 | 
			
		||||
@ -107,7 +107,7 @@ Version 1.5.7beta05 [(PENDING RELEASE)]
 | 
			
		||||
  Added MINGW support to CMakeLists.txt
 | 
			
		||||
  Reject invalid compression flag or method when reading the iTXt chunk.
 | 
			
		||||
 | 
			
		||||
Version 1.6.0alpha01 [December 5, 2011]
 | 
			
		||||
Version 1.6.0alpha01 [December 8, 2011]
 | 
			
		||||
  Removed machine-generated configure files from the GIT repository (they will
 | 
			
		||||
    continue to appear in the tarball distributions).
 | 
			
		||||
  Restored the new 'simplified' API, which was deleted from libpng-1.5.7.
 | 
			
		||||
@ -135,6 +135,12 @@ Version 1.6.0alpha01 [December 5, 2011]
 | 
			
		||||
    as in libpng-1.5.4.
 | 
			
		||||
  Put CRLF line endings in the owatcom project files.
 | 
			
		||||
  Fixed minor memset/sizeof errors in pngvalid.c.
 | 
			
		||||
  Fixed race conditions in parallel make builds. With higher degress of
 | 
			
		||||
    parallelism during 'make' the use of the same temporary file names such
 | 
			
		||||
    as 'dfn*' can result in a race where a temporary file from one arm of the
 | 
			
		||||
    build is deleted or overwritten in another arm.  This changes the
 | 
			
		||||
    temporary files for suffix rules to always use $* and ensures that the
 | 
			
		||||
    non-suffix rules use unique file names.
 | 
			
		||||
 | 
			
		||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
 | 
			
		||||
(subscription required; visit
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								CHANGES
									
									
									
									
									
								
							@ -3752,7 +3752,7 @@ Version 1.5.7beta05 [(PENDING RELEASE)]
 | 
			
		||||
  Added MINGW support to CMakeLists.txt
 | 
			
		||||
  Reject invalid compression flag or method when reading the iTXt chunk.
 | 
			
		||||
 | 
			
		||||
Version 1.6.0alpha01 [December 5, 2011]
 | 
			
		||||
Version 1.6.0alpha01 [December 8, 2011]
 | 
			
		||||
  Removed machine-generated configure files from the GIT repository (they will
 | 
			
		||||
    continue to appear in the tarball distributions).
 | 
			
		||||
  Restored the new 'simplified' API, which was deleted from libpng-1.5.7.
 | 
			
		||||
@ -3780,6 +3780,12 @@ Version 1.6.0alpha01 [December 5, 2011]
 | 
			
		||||
    as in libpng-1.5.4.
 | 
			
		||||
  Put CRLF line endings in the owatcom project files.
 | 
			
		||||
  Fixed minor memset/sizeof errors in pngvalid.c.
 | 
			
		||||
  Fixed race conditions in parallel make builds. With higher degress of
 | 
			
		||||
    parallelism during 'make' the use of the same temporary file names such
 | 
			
		||||
    as 'dfn*' can result in a race where a temporary file from one arm of the
 | 
			
		||||
    build is deleted or overwritten in another arm.  This changes the
 | 
			
		||||
    temporary files for suffix rules to always use $* and ensures that the
 | 
			
		||||
    non-suffix rules use unique file names.
 | 
			
		||||
 | 
			
		||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 | 
			
		||||
(subscription required; visit
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										48
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								Makefile.am
									
									
									
									
									
								
							@ -88,7 +88,7 @@ EXTRA_DIST= \
 | 
			
		||||
 | 
			
		||||
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn
 | 
			
		||||
 | 
			
		||||
CLEANFILES= dfn.c dfn?.out pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
 | 
			
		||||
CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
 | 
			
		||||
	libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
 | 
			
		||||
	check.new pnglibconf.* symbols.new pngtest-log.txt \
 | 
			
		||||
	$(SCRIPT_CLEANFILES)
 | 
			
		||||
@ -143,47 +143,49 @@ SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\
 | 
			
		||||
		-DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE
 | 
			
		||||
 | 
			
		||||
.dfn.out:
 | 
			
		||||
	rm -f $@ dfn.c dfn?.out
 | 
			
		||||
	rm -f $@ $*.c $*.tf[123]
 | 
			
		||||
	test -d scripts || mkdir scripts
 | 
			
		||||
	echo '#include "$<"' >dfn.c
 | 
			
		||||
	echo '#include "$<"' >$*.c
 | 
			
		||||
	$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) @LIBPNG_DEFINES@\
 | 
			
		||||
	    $(CPPFLAGS) $(SYMBOL_CFLAGS) dfn.c > dfn1.out
 | 
			
		||||
	    $(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1
 | 
			
		||||
	$(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\
 | 
			
		||||
	    dfn1.out >dfn2.out
 | 
			
		||||
	$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' dfn2.out >dfn3.out
 | 
			
		||||
	rm -f dfn.c dfn[12].out
 | 
			
		||||
	mv dfn3.out $@
 | 
			
		||||
	    $*.tf1 >$*.tf2
 | 
			
		||||
	$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' $*.tf2 >$*.tf3
 | 
			
		||||
	rm -f $*.c $*.tf[12]
 | 
			
		||||
	mv $*.tf3 $@
 | 
			
		||||
 | 
			
		||||
# The .dfn file for pnglibconf.h is machine generated
 | 
			
		||||
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
 | 
			
		||||
	rm -f $@ dfn?.out
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out version=search\
 | 
			
		||||
	rm -f $@ $*.tf[45]
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
 | 
			
		||||
	    ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
 | 
			
		||||
	    $(DFA_XTRA) 1>&2
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
 | 
			
		||||
	rm dfn1.out
 | 
			
		||||
	mv dfn2.out $@
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2
 | 
			
		||||
	rm $*.tf4
 | 
			
		||||
	mv $*.tf5 $@
 | 
			
		||||
 | 
			
		||||
# Symbol checks (.def and .out files should match)
 | 
			
		||||
scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out
 | 
			
		||||
 | 
			
		||||
.out.chk:
 | 
			
		||||
	rm -f $@ symbols.new
 | 
			
		||||
	rm -f $@ $*.new
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\
 | 
			
		||||
	    $< >&2
 | 
			
		||||
	mv symbols.new $@
 | 
			
		||||
	    of="$*.new" $< >&2
 | 
			
		||||
	mv $*.new $@
 | 
			
		||||
 | 
			
		||||
# used on demand to regenerate the standard header, CPPFLAGS should
 | 
			
		||||
# be empty - no non-standard defines
 | 
			
		||||
scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
 | 
			
		||||
	rm -f $@ dfn?.out
 | 
			
		||||
	rm -f $@ pnglibconf.tf[67]
 | 
			
		||||
	test -z "$(CPPFLAGS)"
 | 
			
		||||
	echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out logunsupported=1
 | 
			
		||||
		version=search ${srcdir}/pngconf.h -\
 | 
			
		||||
		${srcdir}/scripts/pnglibconf.dfa 1>&2
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2
 | 
			
		||||
	rm dfn1.out
 | 
			
		||||
	mv dfn2.out $@
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\
 | 
			
		||||
	    logunsupported=1 version=search ${srcdir}/pngconf.h -\
 | 
			
		||||
	    ${srcdir}/scripts/pnglibconf.dfa 1>&2
 | 
			
		||||
	$(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf7\
 | 
			
		||||
	    pnglibconf.tf6 1>&2
 | 
			
		||||
	rm pnglibconf.tf6
 | 
			
		||||
	mv pnglibconf.tf7 $@
 | 
			
		||||
 | 
			
		||||
$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
 | 
			
		||||
	pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,9 @@
 | 
			
		||||
# awk -f checksym.awk official-def list-to-check
 | 
			
		||||
#
 | 
			
		||||
# Output is a file in the current directory called 'symbols.new',
 | 
			
		||||
# stdout holds error messages.  Error code indicates success or
 | 
			
		||||
# failure.
 | 
			
		||||
# the value of the awk variable "of" (which can be changed on the
 | 
			
		||||
# command line if required.)  stdout holds error messages.  Error
 | 
			
		||||
# code indicates success or failure.
 | 
			
		||||
#
 | 
			
		||||
# NOTE: this is a pure, old fashioned, awk script.  It will
 | 
			
		||||
# work with any awk
 | 
			
		||||
@ -21,6 +22,7 @@ BEGIN{
 | 
			
		||||
   mastero = 0      # highest ordinal in master file
 | 
			
		||||
   symbolo = 0      # highest ordinal in png.h
 | 
			
		||||
   missing = "error"# log an error on missing symbols
 | 
			
		||||
   of="symbols.new" # default to a fixed name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Read existing definitions from the master file (the first
 | 
			
		||||
@ -151,11 +153,11 @@ END{
 | 
			
		||||
 | 
			
		||||
      # Finally generate symbols.new
 | 
			
		||||
      if (symbol[o] != "")
 | 
			
		||||
         print " " symbol[o], "@" o > "symbols.new"
 | 
			
		||||
         print " " symbol[o], "@" o > of
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if (err != 0) {
 | 
			
		||||
      print "*** A new list is in symbols.new ***"
 | 
			
		||||
      print "*** A new list is in", of, "***"
 | 
			
		||||
      exit 1
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user