001// Simple test model for testing for leaks in Manager.
002/*
003   Copyright (c) 2017-2018 The Regents of the University of California.
004   All rights reserved.
005   Permission is hereby granted, without written agreement and without
006   license or royalty fees, to use, copy, modify, and distribute this
007   software and its documentation for any purpose, provided that the above
008   copyright notice and the following two paragraphs appear in all copies
009   of this software.
010
011   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
012   FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
013   ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
014   THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
015   SUCH DAMAGE.
016
017   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
018   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
019   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
020   PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
021   CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
022   ENHANCEMENTS, OR MODIFICATIONS.
023
024   PT_COPYRIGHT_VERSION_2
025   COPYRIGHTENDKEY
026*/
027
028package ptolemy.actor.test;
029
030import ptolemy.actor.Manager;
031import ptolemy.actor.TypedCompositeActor;
032import ptolemy.actor.lib.Ramp;
033import ptolemy.actor.lib.Recorder;
034import ptolemy.data.IntToken;
035import ptolemy.data.expr.Parameter;
036import ptolemy.domains.sdf.kernel.SDFDirector;
037
038/** Simple test for leaks in Manager.
039 *
040 *  See https://wiki.eecs.berkeley.edu/ptexternal/Main/Main/MemoryLeaks
041 *
042 *  See https://projects.ecoinformatics.org/ecoinfo/issues/7190
043 *
044 *  @author Christpher Brooks, based on leak.java by Daniel Crawl
045@version $Id$
046@since Ptolemy II 11.0
047 *  @version $Id$
048 */
049public class ManagerLeak {
050
051    public void go() throws Throwable {
052        TypedCompositeActor top = new TypedCompositeActor();
053        Manager manager = new Manager();
054        SDFDirector director = new SDFDirector();
055        top.setDirector(director);
056        top.setName("top");
057        top.setManager(manager);
058
059        Parameter iterations = (Parameter) director.getAttribute("iterations");
060        iterations.setToken(new IntToken(3));
061
062        Ramp ramp = new Ramp(top, "ramp");
063        Recorder recorder = new Recorder(top, "recorder");
064        top.connect(ramp.output, recorder.input);
065
066        manager.run();
067
068        manager.execute();
069
070        manager.run();
071
072        top.setManager(null);
073        top.setContainer(null);
074
075        manager = null;
076    }
077
078    public static void main(String[] args) {
079        try {
080            ManagerLeak managerLeak = new ManagerLeak();
081            managerLeak.go();
082            System.gc();
083
084            System.out.println("Sleeping...");
085            Thread.sleep(100000L);
086        } catch (Throwable t) {
087            System.err.println("caught: " + t);
088        }
089    }
090
091}