CVSROOT: /cvsroot/lilypond
Module name: lilypond
Branch:
Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/05/31 15:25:26
Modified files:
. : ChangeLog
lily : global-context-scheme.cc global-context.cc
grob.cc music-output.cc paper-score.cc
parser.yy score-context.cc score-engraver.cc
score-performer.cc score-translator.cc score.cc
lily/include : global-context.hh score-context.hh
score-engraver.hh score-performer.hh
score-translator.hh
scm : lily.scm
Log message:
* lily/score.cc (Score): unprotect copy of Output_def. Plugs
memory leak.
* lily/parser.yy (score_body): don't clone Score, that's done in
Lily_lexer::try_special_identifiers(). This fixes a memory leak.
* lily/score-engraver.cc (derived_mark): new function.
(initialize): unprotect Paper_score. This fixes a memory leak.
* lily/score-performer.cc (derived_mark): new function.
* lily/score-translator.cc (get_output): use SCM for get_output() call.
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3692&tr2=1.3693&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/global-context-scheme.cc.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/global-context.cc.diff?tr1=1.31&tr2=1.32&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/grob.cc.diff?tr1=1.130&tr2=1.131&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/music-output.cc.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-score.cc.diff?tr1=1.84&tr2=1.85&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/parser.yy.diff?tr1=1.470&tr2=1.471&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-context.cc.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-engraver.cc.diff?tr1=1.145&tr2=1.146&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-performer.cc.diff?tr1=1.61&tr2=1.62&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-translator.cc.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score.cc.diff?tr1=1.162&tr2=1.163&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/global-context.hh.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/score-context.hh.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/score-engraver.hh.diff?tr1=1.31&tr2=1.32&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/score-performer.hh.diff?tr1=1.30&tr2=1.31&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/score-translator.hh.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/lily.scm.diff?tr1=1.350&tr2=1.351&r1=text&r2=text
Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.3692 lilypond/ChangeLog:1.3693
--- lilypond/ChangeLog:1.3692 Tue May 31 14:09:00 2005
+++ lilypond/ChangeLog Tue May 31 15:25:25 2005
@@ -1,5 +1,18 @@
2005-05-31 Han-Wen Nienhuys <[EMAIL PROTECTED]>
+ * lily/score.cc (Score): unprotect copy of Output_def. Plugs
+ memory leak.
+
+ * lily/parser.yy (score_body): don't clone Score, that's done in
+ Lily_lexer::try_special_identifiers(). This fixes a memory leak.
+
+ * lily/score-engraver.cc (derived_mark): new function.
+ (initialize): unprotect Paper_score. This fixes a memory leak.
+
+ * lily/score-performer.cc (derived_mark): new function.
+
+ * lily/score-translator.cc (get_output): use SCM for get_output() call.
+
* stepmake/aclocal.m4: put FlexLexer.h test in conftest.cc. Fixes
spurious warning.
Index: lilypond/lily/global-context-scheme.cc
diff -u lilypond/lily/global-context-scheme.cc:1.8
lilypond/lily/global-context-scheme.cc:1.9
--- lilypond/lily/global-context-scheme.cc:1.8 Mon Apr 18 00:36:45 2005
+++ lilypond/lily/global-context-scheme.cc Tue May 31 15:25:26 2005
@@ -24,10 +24,10 @@
Global_context *g = dynamic_cast<Global_context *> (unsmob_context
(context));
SCM_ASSERT_TYPE (g, context, SCM_ARG1, __FUNCTION__, "Global context");
- Music_output *output = g->get_output ();
+ SCM output = g->get_output ();
progress_indication ("\n");
- output->process ();
- return output->self_scm ();
+ unsmob_music_output (output)->process ();
+ return output;
}
LY_DEFINE (ly_run_translator, "ly:run-translator",
Index: lilypond/lily/global-context.cc
diff -u lilypond/lily/global-context.cc:1.31
lilypond/lily/global-context.cc:1.32
--- lilypond/lily/global-context.cc:1.31 Wed May 25 10:22:34 2005
+++ lilypond/lily/global-context.cc Tue May 31 15:25:26 2005
@@ -97,7 +97,7 @@
: 0;
}
-Music_output *
+SCM
Global_context::get_output ()
{
return get_score_context ()->get_output ();
Index: lilypond/lily/grob.cc
diff -u lilypond/lily/grob.cc:1.130 lilypond/lily/grob.cc:1.131
--- lilypond/lily/grob.cc:1.130 Mon Apr 18 00:36:45 2005
+++ lilypond/lily/grob.cc Tue May 31 15:25:26 2005
@@ -663,8 +663,8 @@
if (s->original_)
scm_gc_mark (s->original_->self_scm ());
- if (s->pscore_ && s->pscore_->layout ())
- scm_gc_mark (s->pscore_->layout ()->self_scm ());
+ if (s->pscore_)
+ scm_gc_mark (s->pscore_->self_scm ());
s->do_derived_mark ();
return s->mutable_property_alist_;
Index: lilypond/lily/include/global-context.hh
diff -u lilypond/lily/include/global-context.hh:1.9
lilypond/lily/include/global-context.hh:1.10
--- lilypond/lily/include/global-context.hh:1.9 Mon Apr 18 00:36:45 2005
+++ lilypond/lily/include/global-context.hh Tue May 31 15:25:26 2005
@@ -29,7 +29,7 @@
void apply_finalizations ();
void add_finalization (SCM);
- virtual Music_output *get_output ();
+ virtual SCM get_output ();
virtual void prepare (Moment);
virtual void one_time_step ();
virtual void finish ();
Index: lilypond/lily/include/score-context.hh
diff -u lilypond/lily/include/score-context.hh:1.5
lilypond/lily/include/score-context.hh:1.6
--- lilypond/lily/include/score-context.hh:1.5 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/score-context.hh Tue May 31 15:25:26 2005
@@ -15,7 +15,7 @@
public:
Score_context (Object_key const *);
- virtual Music_output *get_output ();
+ virtual SCM get_output ();
virtual void prepare (Moment);
virtual void finish ();
virtual void one_time_step ();
Index: lilypond/lily/include/score-engraver.hh
diff -u lilypond/lily/include/score-engraver.hh:1.31
lilypond/lily/include/score-engraver.hh:1.32
--- lilypond/lily/include/score-engraver.hh:1.31 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/score-engraver.hh Tue May 31 15:25:26 2005
@@ -32,6 +32,7 @@
virtual void prepare (Moment);
virtual void one_time_step ();
+
/* Engraver_group_engraver interface */
virtual void acknowledge_grob (Grob_info);
virtual bool try_music (Music *);
@@ -40,10 +41,14 @@
virtual void announce_grob (Grob_info);
virtual void stop_translation_timestep ();
+ /*
+ Translator interface
+ */
+ virtual void derived_mark () const;
public:
TRANSLATOR_DECLARATIONS (Score_engraver);
void forbid_breaks ();
- virtual Music_output *get_output ();
+ virtual SCM get_output ();
};
#endif /* SCORE_ENGRAVER_HH */
Index: lilypond/lily/include/score-performer.hh
diff -u lilypond/lily/include/score-performer.hh:1.30
lilypond/lily/include/score-performer.hh:1.31
--- lilypond/lily/include/score-performer.hh:1.30 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/score-performer.hh Tue May 31 15:25:26 2005
@@ -29,7 +29,8 @@
virtual void announce_element (Audio_element_info);
virtual int get_tempo () const;
virtual void play_element (Audio_element *p);
- virtual Music_output *get_output ();
+ virtual SCM get_output ();
+ virtual void derived_mark () const;
private:
void header (Midi_stream &);
Index: lilypond/lily/include/score-translator.hh
diff -u lilypond/lily/include/score-translator.hh:1.3
lilypond/lily/include/score-translator.hh:1.4
--- lilypond/lily/include/score-translator.hh:1.3 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/score-translator.hh Tue May 31 15:25:26 2005
@@ -15,7 +15,7 @@
{
friend class Score_context;
protected:
- virtual Music_output *get_output ();
+ virtual SCM get_output ();
virtual void prepare (Moment);
virtual void finish ();
virtual void one_time_step ();
Index: lilypond/lily/music-output.cc
diff -u lilypond/lily/music-output.cc:1.3 lilypond/lily/music-output.cc:1.4
--- lilypond/lily/music-output.cc:1.3 Mon Apr 18 13:27:48 2005
+++ lilypond/lily/music-output.cc Tue May 31 15:25:26 2005
@@ -8,7 +8,9 @@
*/
#include "music-output.hh"
+
#include "ly-smobs.icc"
+#include "virtual-methods.hh"
Music_output::Music_output ()
{
@@ -44,9 +46,12 @@
}
int
-Music_output::print_smob (SCM, SCM p, scm_print_state*)
+Music_output::print_smob (SCM s, SCM p, scm_print_state*)
{
- scm_puts ("#<Music_output>", p);
+ Music_output *sc = (Music_output *) SCM_CELL_WORD_1 (s);
+ scm_puts ("#<", p);
+ scm_puts (classname (sc), p);
+ scm_puts (">", p);
return 1;
}
Index: lilypond/lily/paper-score.cc
diff -u lilypond/lily/paper-score.cc:1.84 lilypond/lily/paper-score.cc:1.85
--- lilypond/lily/paper-score.cc:1.84 Mon Apr 18 13:27:48 2005
+++ lilypond/lily/paper-score.cc Tue May 31 15:25:26 2005
@@ -39,6 +39,8 @@
void
Paper_score::derived_mark () const
{
+ if (layout_)
+ scm_gc_mark (layout_->self_scm ());
scm_gc_mark (systems_);
scm_gc_mark (paper_systems_);
}
Index: lilypond/lily/parser.yy
diff -u lilypond/lily/parser.yy:1.470 lilypond/lily/parser.yy:1.471
--- lilypond/lily/parser.yy:1.470 Wed May 25 01:16:45 2005
+++ lilypond/lily/parser.yy Tue May 31 15:25:26 2005
@@ -792,7 +792,7 @@
$$->set_spot (@$);
}
| SCORE_IDENTIFIER {
- $$ = new Score ( *unsmob_score ($1));
+ $$ = unsmob_score ($1);
$$->set_spot (@$);
}
| score_body object_id_setting {
Index: lilypond/lily/score-context.cc
diff -u lilypond/lily/score-context.cc:1.10 lilypond/lily/score-context.cc:1.11
--- lilypond/lily/score-context.cc:1.10 Thu Mar 10 14:36:13 2005
+++ lilypond/lily/score-context.cc Tue May 31 15:25:26 2005
@@ -36,7 +36,7 @@
s->one_time_step ();
}
-Music_output *
+SCM
Score_context::get_output ()
{
Translator *t = implementation ();
Index: lilypond/lily/score-engraver.cc
diff -u lilypond/lily/score-engraver.cc:1.145
lilypond/lily/score-engraver.cc:1.146
--- lilypond/lily/score-engraver.cc:1.145 Sun May 8 23:30:50 2005
+++ lilypond/lily/score-engraver.cc Tue May 31 15:25:26 2005
@@ -35,6 +35,15 @@
}
void
+Score_engraver::derived_mark () const
+{
+ if (pscore_)
+ scm_gc_mark (pscore_->self_scm ());
+ Score_translator::derived_mark ();
+ Engraver_group_engraver::derived_mark ();
+}
+
+void
Score_engraver::make_columns ()
{
/*
@@ -106,6 +115,7 @@
}
pscore_ = new Paper_score (dynamic_cast<Output_def *> (get_output_def ()));
+ scm_gc_unprotect_object (pscore_->self_scm ());
SCM props = updated_grob_properties (context (), ly_symbol2scm ("System"));
@@ -217,12 +227,11 @@
system_->add_column (musical_column_);
}
-Music_output *
+SCM
Score_engraver::get_output ()
{
Music_output *o = pscore_;
- ///FIXME WTF ? pscore_ = 0;
- return o;
+ return o->self_scm ();
}
bool
Index: lilypond/lily/score-performer.cc
diff -u lilypond/lily/score-performer.cc:1.61
lilypond/lily/score-performer.cc:1.62
--- lilypond/lily/score-performer.cc:1.61 Thu Mar 10 14:36:13 2005
+++ lilypond/lily/score-performer.cc Tue May 31 15:25:26 2005
@@ -78,18 +78,29 @@
return ::get_tempo (performance_->midi_, Moment (Rational (1, 4)));
}
-Music_output *
+SCM
Score_performer::get_output ()
{
Music_output *o = performance_;
performance_ = 0;
- return o;
+ return o->self_scm ();
+}
+
+void
+Score_performer::derived_mark () const
+{
+ if (performance_)
+ scm_gc_mark (performance_->self_scm ());
+
+ Score_translator::derived_mark ();
+ Performer_group_performer::derived_mark ();
}
void
Score_performer::initialize ()
{
performance_ = new Performance;
+ scm_gc_unprotect_object (performance_->self_scm ());
performance_->midi_ = get_output_def ();
Translator_group::initialize ();
Index: lilypond/lily/score-translator.cc
diff -u lilypond/lily/score-translator.cc:1.6
lilypond/lily/score-translator.cc:1.7
--- lilypond/lily/score-translator.cc:1.6 Thu Mar 10 14:36:13 2005
+++ lilypond/lily/score-translator.cc Tue May 31 15:25:26 2005
@@ -14,10 +14,10 @@
{
}
-Music_output *
+SCM
Score_translator::get_output ()
{
- return 0;
+ return SCM_EOL;
}
void
Index: lilypond/lily/score.cc
diff -u lilypond/lily/score.cc:1.162 lilypond/lily/score.cc:1.163
--- lilypond/lily/score.cc:1.162 Mon Apr 18 12:53:17 2005
+++ lilypond/lily/score.cc Tue May 31 15:25:26 2005
@@ -78,8 +78,11 @@
scm_gc_unprotect_object (music_);
for (int i = 0, n = s.defs_.size (); i < n; i++)
- defs_.push (s.defs_[i]->clone ());
-
+ {
+ Output_def * copy = s.defs_[i]->clone ();
+ defs_.push (copy);
+ scm_gc_unprotect_object (copy->self_scm ());
+ }
header_ = ly_make_anonymous_module (false);
if (ly_c_module_p (s.header_))
ly_module_copy (header_, s.header_);
Index: lilypond/scm/lily.scm
diff -u lilypond/scm/lily.scm:1.350 lilypond/scm/lily.scm:1.351
--- lilypond/scm/lily.scm:1.350 Mon May 30 23:38:46 2005
+++ lilypond/scm/lily.scm Tue May 31 15:25:26 2005
@@ -274,7 +274,7 @@
".scm"))
(outfile (open-file out-file-name "w")))
- (display "Dumping gc protected objs to ...\n")
+ (display (format "Dumping gc protected objs to ~a...\n" out-file-name))
(display
(filter
(lambda (x) (not (symbol? x)))
@@ -326,8 +326,8 @@
(catch 'ly-file-failed
(lambda () (ly:parse-file file-name))
(lambda (x . args) (handler x file-name)))
- ;;(lambda (x) (handler x f)))
- (if #f
+
+ (if #t
(dump-gc-protects)))
(use-modules (scm editor))
_______________________________________________
Lilypond-cvs mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs