CVSROOT: /cvsroot/lilypond
Module name: lilypond
Branch:
Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/06/10 00:36:22
Modified files:
. : ChangeLog
lily : lily-lexer.cc lily-parser.cc ly-module.cc
output-def.cc
lily/include : lily-lexer.hh
scm : lily.scm
Log message:
(ly_make_anonymous_module): call make-module
directly. This fixes a massive memory leak, provided you use CVS
GUILE.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3754&tr2=1.3755&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/lily-lexer.cc.diff?tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/lily-parser.cc.diff?tr1=1.39&tr2=1.40&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/ly-module.cc.diff?tr1=1.41&tr2=1.42&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/output-def.cc.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/lily-lexer.hh.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/lily.scm.diff?tr1=1.361&tr2=1.362&r1=text&r2=text
Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.3754 lilypond/ChangeLog:1.3755
--- lilypond/ChangeLog:1.3754 Thu Jun 9 23:07:02 2005
+++ lilypond/ChangeLog Fri Jun 10 00:36:20 2005
@@ -1,3 +1,9 @@
+2005-06-10 Han-Wen Nienhuys <[EMAIL PROTECTED]>
+
+ * lily/ly-module.cc (ly_make_anonymous_module): call make-module
+ directly. This fixes a massive memory leak, provided you use CVS
+ GUILE.
+
2005-06-10 Erik Sandberg <[EMAIL PROTECTED]>
* ly/property-init.ly: Added tieDashed.
Index: lilypond/lily/include/lily-lexer.hh
diff -u lilypond/lily/include/lily-lexer.hh:1.12
lilypond/lily/include/lily-lexer.hh:1.13
--- lilypond/lily/include/lily-lexer.hh:1.12 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/lily-lexer.hh Fri Jun 10 00:36:22 2005
@@ -22,8 +22,6 @@
class Lily_lexer : public Includable_lexer
{
DECLARE_SMOBS (Lily_lexer,);
-public:
- SCM scopes_;
private:
int lookup_keyword (String);
@@ -34,7 +32,8 @@
char escaped_char (char) const;
Keyword_table *keytable_;
-
+ SCM scopes_;
+ SCM start_module_;
public:
String main_input_name_;
void *lexval;
@@ -61,6 +60,7 @@
Input here_input () const;
void add_scope (SCM);
+ void set_current_scope ();
SCM remove_scope ();
void start_main_input ();
Index: lilypond/lily/lily-lexer.cc
diff -u lilypond/lily/lily-lexer.cc:1.29 lilypond/lily/lily-lexer.cc:1.30
--- lilypond/lily/lily-lexer.cc:1.29 Wed Jun 8 13:07:11 2005
+++ lilypond/lily/lily-lexer.cc Fri Jun 10 00:36:21 2005
@@ -93,7 +93,7 @@
scopes_ = SCM_EOL;
error_level_ = 0;
is_main_input_ = false;
-
+ start_module_ = SCM_EOL;
smobify_self ();
add_scope (ly_make_anonymous_module (false));
@@ -108,7 +108,8 @@
chordmodifier_tab_ = src.chordmodifier_tab_;
pitchname_tab_stack_ = src.pitchname_tab_stack_;
sources_ = src.sources_;
-
+ start_module_ = SCM_EOL;
+
error_level_ = src.error_level_;
is_main_input_ = src.is_main_input_;
@@ -139,6 +140,9 @@
Lily_lexer::add_scope (SCM module)
{
ly_reexport_module (scm_current_module ());
+ if (!scm_is_pair (scopes_))
+ start_module_ = scm_current_module ();
+
scm_set_current_module (module);
for (SCM s = scopes_; scm_is_pair (s); s = scm_cdr (s))
{
@@ -147,16 +151,25 @@
scopes_ = scm_cons (module, scopes_);
}
+
SCM
Lily_lexer::remove_scope ()
{
SCM sc = scm_car (scopes_);
scopes_ = scm_cdr (scopes_);
- scm_set_current_module (scm_car (scopes_));
-
+ set_current_scope ();
return sc;
}
+void
+Lily_lexer::set_current_scope ()
+{
+ if (scm_is_pair (scopes_))
+ scm_set_current_module (scm_car (scopes_));
+ else
+ scm_set_current_module (start_module_);
+}
+
int
Lily_lexer::lookup_keyword (String s)
{
Index: lilypond/lily/lily-parser.cc
diff -u lilypond/lily/lily-parser.cc:1.39 lilypond/lily/lily-parser.cc:1.40
--- lilypond/lily/lily-parser.cc:1.39 Thu Jun 9 18:05:31 2005
+++ lilypond/lily/lily-parser.cc Fri Jun 10 00:36:22 2005
@@ -87,6 +87,8 @@
try_load_text_metrics (out_name);
}
+ SCM oldmod = scm_current_module ();
+
lexer_ = new Lily_lexer (sources_);
scm_gc_unprotect_object (lexer_->self_scm ());
// TODO: use $parser
@@ -120,6 +122,8 @@
error_level_ = error_level_ | lexer_->error_level_;
lexer_ = 0;
+
+ scm_set_current_module (oldmod);
}
void
@@ -131,12 +135,10 @@
scm_gc_unprotect_object (lexer_->self_scm ());
SCM oldmod = scm_current_module ();
- scm_set_current_module (scm_car (lexer_->scopes_));
-
// TODO: use $parser
lexer_->set_identifier (ly_symbol2scm ("parser"),
self_scm ());
-
+
lexer_->main_input_name_ = "<string>";
lexer_->is_main_input_ = true;
Index: lilypond/lily/ly-module.cc
diff -u lilypond/lily/ly-module.cc:1.41 lilypond/lily/ly-module.cc:1.42
--- lilypond/lily/ly-module.cc:1.41 Tue Apr 12 22:49:28 2005
+++ lilypond/lily/ly-module.cc Fri Jun 10 00:36:22 2005
@@ -13,22 +13,17 @@
#define FUNC_NAME __FUNCTION__
-static int module_count;
-
-void
-ly_init_anonymous_module (void *data)
-{
- (void) data;
-}
-
SCM
ly_make_anonymous_module (bool safe)
{
SCM mod = SCM_EOL;
if (!safe)
{
- String s = "*anonymous-ly-" + to_string (module_count++) + "*";
- mod = scm_c_define_module (s.to_str0 (), ly_init_anonymous_module, 0);
+ SCM maker = ly_lily_module_constant ("make-module");
+ SCM scm_module = ly_lily_module_constant ("the-scm-module");
+
+ mod = scm_call_0 (maker);
+ ly_use_module (mod, scm_module);
ly_use_module (mod, global_lily_module);
}
else
Index: lilypond/lily/output-def.cc
diff -u lilypond/lily/output-def.cc:1.16 lilypond/lily/output-def.cc:1.17
--- lilypond/lily/output-def.cc:1.16 Mon Jan 31 12:53:11 2005
+++ lilypond/lily/output-def.cc Fri Jun 10 00:36:22 2005
@@ -19,6 +19,10 @@
#include "ly-smobs.icc"
+#include "program-option.hh"
+
+#include "string-convert.hh"
+
Output_def::Output_def ()
{
scope_ = SCM_EOL;
Index: lilypond/scm/lily.scm
diff -u lilypond/scm/lily.scm:1.361 lilypond/scm/lily.scm:1.362
--- lilypond/scm/lily.scm:1.361 Thu Jun 9 18:28:59 2005
+++ lilypond/scm/lily.scm Fri Jun 10 00:36:22 2005
@@ -268,7 +268,7 @@
(lambda (a b)
(< (object-address (car a))
(object-address (car b))))))
-
+
(out-file-name (string-append
"gcstat-" (number->string gc-protect-stat-count)
".scm"))
@@ -288,7 +288,24 @@
" ")
"\n")))
protects))
- outfile)))
+ outfile)
+
+ (if (defined? 'gc-live-object-stats)
+ (let*
+ ((dummy (gc))
+ (dummy2 (gc))
+ (stats (gc-live-object-stats))
+ )
+
+ (for-each
+ (lambda (x)
+ (format outfile "~a: ~a\n" (car x) (cdr x)))
+ (sort (gc-live-object-stats)
+ (lambda (x y)
+ (string<? (car x) (car y)))))
+ ))
+
+ ))
(define-public (tweak-grob-property grob sym val)
(set! (ly:grob-property grob sym) val))
_______________________________________________
Lilypond-cvs mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs