From de28a3247f8d1df75fed05ed814ee94d3083a819 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 28 Jul 2005 12:07:31 +0000 Subject: [PATCH] swap up and down fa head --- ChangeLog | 14 ++++++++++++++ VERSION | 2 +- config.make.in | 2 ++ configure.in | 7 +++++++ lily/GNUmakefile | 13 +++++++++++++ lily/ly-module.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ lily/main.cc | 24 ++++++++++++++++++++++++ mf/feta-bolletjes.mf | 4 ++-- 8 files changed, 106 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 38b97d1221..224c0b1558 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2005-07-28 Han-Wen Nienhuys + + * mf/feta-bolletjes.mf: swap up and down fa head + +2005-07-25 Han-Wen Nienhuys + + * lily/main.cc (setup_guile_env): backport: tweak GC settings to + improve performance. + (setup_guile_env): set init heap sizes to 16/1 mb. Decreases + number of segments. + + * lily/ly-module.cc (LY_DEFINE): backport: + ly_clear_anonymous_modules(). Kludge to plug memory leak in GUILE. + 2005-07-21 Han-Wen Nienhuys * scm/output-lib.scm (tablature-stem-attachment-function): stem diff --git a/VERSION b/VERSION index 64f8a589ae..4dbc564328 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=6 -PATCH_LEVEL=1 +PATCH_LEVEL=2 MY_PATCH_LEVEL= diff --git a/config.make.in b/config.make.in index 32fd87e390..004c597be6 100644 --- a/config.make.in +++ b/config.make.in @@ -111,3 +111,5 @@ WINDRES = @WINDRES@ YACC = @YACC@ ZIP = @ZIP@ FLEXLEXER_PATH = @FLEXLEXER_PATH@ + +LINK_GXX_STATICALLY = @LINK_GXX_STATICALLY@ diff --git a/configure.in b/configure.in index 98890053fd..470440da47 100644 --- a/configure.in +++ b/configure.in @@ -32,6 +32,13 @@ AC_ARG_ENABLE(relocation, [ --enable-relocation compile with dynamic relocation. Default: off], [reloc_b=$enableval]) + +AC_SUBST(LINK_GXX_STATICALLY) +LINK_GXX_STATICALLY=no +AC_ARG_ENABLE(static-gxx, + [ --enable-static-gxx link libstdc++.a statically. Default: off], + [LINK_GXX_STATICALLY=$enableval]) + # must come before any header checks STEPMAKE_COMPILE diff --git a/lily/GNUmakefile b/lily/GNUmakefile index 6bf022fc80..36c52f7c1b 100644 --- a/lily/GNUmakefile +++ b/lily/GNUmakefile @@ -19,6 +19,10 @@ ifeq ($(HAVE_LIBKPATHSEA_SO),no) MODULE_LDFLAGS+= $(KPATHSEA_LIBS) endif +ifeq ($(LINK_GXX_STATICALLY),yes) +MODULE_LDFLAGS += -L$(outdir) -static-libgcc +endif + # for profiling, link guile statically: # @@ -46,6 +50,15 @@ ETAGS_FLAGS += --regex='{c++}/^LY_DEFINE *([^"]*"\([^"]+\)"/\1/' default: + +$(outdir)/libstdc++.a: + ln -s `$(CXX) -print-file-name=libstdc++.a` $(outdir)/ + +ifeq ($(LINK_GXX_STATICALLY),yes) +$(outdir)/lilypond: $(outdir)/libstdc++.a +endif + + # force these: Make can't know these have to be generated in advance $(outdir)/lily-parser.o: $(outdir)/parser.hh $(outdir)/lily-lexer.o: $(outdir)/parser.hh $(outdir)/FlexLexer.h diff --git a/lily/ly-module.cc b/lily/ly-module.cc index 7d613fcdd8..5f36289288 100644 --- a/lily/ly-module.cc +++ b/lily/ly-module.cc @@ -10,6 +10,44 @@ #include "warn.hh" #include "main.hh" #include "string.hh" +#include "protected-scm.hh" + +#define MODULE_GC_KLUDGE + +#ifdef MODULE_GC_KLUDGE +Protected_scm anonymous_modules = SCM_EOL; + +#endif + +LY_DEFINE(ly_clear_anonymous_modules, "ly:clear-anonymous-modules", + 0, 0, 0, (), + "Plug a GUILE 1.6 and 1.7 memory leak by breaking a weak reference " + "pointer cycle explicitly." + ) +{ +#ifdef MODULE_GC_KLUDGE + for (SCM s = anonymous_modules; + scm_is_pair (s); + s = scm_cdr (s)) + { + SCM module = scm_car (s); + SCM closure = SCM_MODULE_EVAL_CLOSURE(module); + SCM prop = scm_procedure_property (closure, ly_symbol2scm ("module")); + + if (ly_is_module (prop)) + { + scm_set_procedure_property_x (closure, ly_symbol2scm ("module"), + SCM_BOOL_F); + } + } + + anonymous_modules = SCM_EOL; +#endif + + return SCM_UNSPECIFIED; +} + + #define FUNC_NAME __FUNCTION__ @@ -35,6 +73,11 @@ ly_make_anonymous_module (bool safe) SCM proc = ly_lily_module_constant ("make-safe-lilypond-module"); mod = scm_call_0 (proc); } + +#ifdef MODULE_GC_KLUDGE + anonymous_modules = scm_cons (mod, anonymous_modules); +#endif + return mod; } diff --git a/lily/main.cc b/lily/main.cc index 1efd32303b..7574ca0082 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -726,11 +726,35 @@ parse_argv (int argc, char **argv) } } +void +setup_guile_env () +{ + char * yield = getenv ("LILYPOND_GC_YIELD"); + bool overwrite = true; + if (!yield) + { + yield = "70"; + overwrite = false; + } + + setenv ("GUILE_MIN_YIELD_1", yield, overwrite); + setenv ("GUILE_MIN_YIELD_2", yield, overwrite); + setenv ("GUILE_MIN_YIELD_MALLOC", yield, overwrite); + + + char *mb16 = "16777216"; + char *mb1 = "1048576"; + + setenv ("SCM_DEFAULT_INIT_HEAP_SIZE_1", mb16, 0); + setenv ("SCM_DEFAULT_INIT_HEAP_SIZE_2", mb1, 0); +} + int main (int argc, char **argv) { setup_localisation (); setup_paths (argv[0]); + setup_guile_env (); parse_argv (argc, argv); if (isatty (STDIN_FILENO)) identify (stderr); diff --git a/mf/feta-bolletjes.mf b/mf/feta-bolletjes.mf index 3cf3559ac8..959046e90d 100644 --- a/mf/feta-bolletjes.mf +++ b/mf/feta-bolletjes.mf @@ -1190,14 +1190,14 @@ def draw_fa_head (expr width_factor) = enddef; -fet_beginchar ("Whole fa up head", "d0fa"); +fet_beginchar ("Whole fa up head", "u0fa"); draw_fa_head (1.8); fill p_up_out; unfill p_up_in; fet_endchar; -fet_beginchar ("Whole fa down head", "u0fa"); +fet_beginchar ("Whole fa down head", "d0fa"); draw_fa_head (1.8); fill p_down_out; unfill p_down_in; -- 2.39.5