Revision 234ad01f9ea08514b1368bbf214e6c779e372a1a authored by Tom Lane on 07 December 2010, 03:55:56 UTC, committed by Tom Lane on 07 December 2010, 03:55:56 UTC
There are some code paths, such as SPI_execute(), where we invoke copyObject() on raw parse trees before doing parse analysis on them. Since the bison grammar is capable of building heavily nested parsetrees while itself using only minimal stack depth, this means that copyObject() can be the front-line function that hits stack overflow before anything else does. Accordingly, it had better have a check_stack_depth() call. I did a bit of performance testing and found that this slows down copyObject() by only a few percent, so the hit ought to be negligible in the context of complete processing of a query. Per off-list report from Toshihide Katayama. Back-patch to all supported branches.
1 parent 6bd3753
GNUmakefile.in
#
# PostgreSQL top level makefile
#
# $PostgreSQL: pgsql/GNUmakefile.in,v 1.50 2009/01/15 01:53:49 momjian Exp $
#
subdir =
top_builddir = .
include $(top_builddir)/src/Makefile.global
all:
$(MAKE) -C doc all
$(MAKE) -C src all
$(MAKE) -C config all
@echo "All of PostgreSQL successfully made. Ready to install."
install:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
@echo "PostgreSQL installation complete."
installdirs uninstall:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
distprep:
$(MAKE) -C doc $@
$(MAKE) -C src $@
$(MAKE) -C config $@
$(MAKE) -C contrib $@
# clean, distclean, etc should apply to contrib too, even though
# it's not built by default
clean:
$(MAKE) -C doc $@
$(MAKE) -C contrib $@
$(MAKE) -C src $@
$(MAKE) -C config $@
# Garbage from autoconf:
@rm -rf autom4te.cache/
# Important: distclean `src' last, otherwise Makefile.global
# will be gone too soon.
distclean maintainer-clean:
$(MAKE) -C doc $@
$(MAKE) -C contrib $@
$(MAKE) -C config $@
$(MAKE) -C src $@
rm -f config.cache config.log config.status GNUmakefile
# Garbage from autoconf:
@rm -rf autom4te.cache/
check: all
check installcheck installcheck-parallel:
$(MAKE) -C src/test $@
GNUmakefile: GNUmakefile.in $(top_builddir)/config.status
./config.status $@
##########################################################################
coverage:
$(MAKE) -C src/backend $@
.PHONY: coverage-html
coverage-html: coverage
rm -rf coverage
mkdir coverage
$(GENHTML) --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=$(abs_top_srcdir)/src `find src/backend -name lcov.info -print`
ifeq ($(enable_coverage),yes)
clean distclean maintainer-clean: clean-coverage-local
.PHONY: clean-coverage-local
clean-coverage-local:
rm -rf coverage
endif
##########################################################################
distdir = postgresql-$(VERSION)
dummy = =install=
garbage = =* "#"* ."#"* *~* *.orig *.rej core postgresql-*
dist: $(distdir).tar.gz
ifeq ($(split-dist), yes)
dist: postgresql-base-$(VERSION).tar.gz postgresql-docs-$(VERSION).tar.gz postgresql-opt-$(VERSION).tar.gz postgresql-test-$(VERSION).tar.gz
endif
dist:
rm -rf $(distdir)
$(distdir).tar: distdir
$(TAR) chf $@ $(distdir)
opt_files = \
src/tools src/tutorial \
$(addprefix src/pl/, plperl plpython tcl)
docs_files = doc/postgres.tar.gz doc/src doc/TODO.detail
postgresql-base-$(VERSION).tar: distdir
$(TAR) -c $(addprefix --exclude $(distdir)/, $(docs_files) $(opt_files) src/test) \
-f $@ $(distdir)
postgresql-docs-$(VERSION).tar: distdir
$(TAR) cf $@ $(addprefix $(distdir)/, $(docs_files))
postgresql-opt-$(VERSION).tar: distdir
$(TAR) cf $@ $(addprefix $(distdir)/, $(opt_files))
postgresql-test-$(VERSION).tar: distdir
$(TAR) cf $@ $(distdir)/src/test
distdir:
rm -rf $(distdir)* $(dummy)
for x in `cd $(top_srcdir) && find . \( -name CVS -prune \) -o \( -name .git -prune \) -o -print`; do \
file=`expr X$$x : 'X\./\(.*\)'`; \
if test -d "$(top_srcdir)/$$file" ; then \
mkdir "$(distdir)/$$file" && chmod 777 "$(distdir)/$$file"; \
else \
ln "$(top_srcdir)/$$file" "$(distdir)/$$file" >/dev/null 2>&1 \
|| cp "$(top_srcdir)/$$file" "$(distdir)/$$file"; \
fi || exit; \
done
$(MAKE) -C $(distdir) distprep
$(MAKE) -C $(distdir)/doc/src/sgml/ HISTORY INSTALL regress_README
cp $(distdir)/doc/src/sgml/HISTORY $(distdir)/
cp $(distdir)/doc/src/sgml/INSTALL $(distdir)/
cp $(distdir)/doc/src/sgml/regress_README $(distdir)/src/test/regress/README
$(MAKE) -C $(distdir) distclean
rm -f $(distdir)/README.git
distcheck: $(distdir).tar.gz
rm -rf $(dummy)
mkdir $(dummy)
$(GZIP) -d -c $< | $(TAR) xf -
install_prefix=`cd $(dummy) && pwd`; \
cd $(distdir) \
&& ./configure --prefix="$$install_prefix"
$(MAKE) -C $(distdir) -q distprep
$(MAKE) -C $(distdir)
$(MAKE) -C $(distdir) install
$(MAKE) -C $(distdir) uninstall
@echo "checking whether \`$(MAKE) uninstall' works"
test `find $(dummy) ! -type d | wc -l` -eq 0
$(MAKE) -C $(distdir) dist
# Room for improvement: Check here whether this distribution tarball
# is sufficiently similar to the original one.
rm -rf $(distdir) $(dummy)
@echo "Distribution integrity checks out."
.PHONY: dist distdir distcheck
unexport split-dist
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...