+2005-07-28 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * mf/feta-bolletjes.mf: swap up and down fa head
+
+2005-07-25 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * 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 <hanwen@xs4all.nl>
* scm/output-lib.scm (tablature-stem-attachment-function): stem
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=6
-PATCH_LEVEL=1
+PATCH_LEVEL=2
MY_PATCH_LEVEL=
YACC = @YACC@
ZIP = @ZIP@
FLEXLEXER_PATH = @FLEXLEXER_PATH@
+
+LINK_GXX_STATICALLY = @LINK_GXX_STATICALLY@
[ --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
MODULE_LDFLAGS+= $(KPATHSEA_LIBS)
endif
+ifeq ($(LINK_GXX_STATICALLY),yes)
+MODULE_LDFLAGS += -L$(outdir) -static-libgcc
+endif
+
# for profiling, link guile statically:
#
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
#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__
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;
}
}
}
+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);
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;