Hallo Alan,
the symptom is that, i.e. that the window stays open and idle,
not even refreshing until the program exits.
You nead that in c? ... bindings are so much faster to try!
Anyhow, I attach x01.c modified to do the work twice,
any device will exit fine and print "all fine" except wxwidgets.
Thanks for your patience
Fulvio

From: "Alan W. Irwin" <[email protected]>
Subject: Re: [Plplot-devel] [ plplot-Bugs-3604554 ] wxwidgets window does not 
close
Date: Fri, 15 Feb 2013 14:07:03 -0800 (PST)

> On 2013-02-15 07:58+0100 fulvio ciriaco wrote:
> 
>> Hallo Alan,
>> it is the same on my computers, I too use debian testing actually.
>> So, probably I was not clear enough, all the examples are fine,
>> in that they immediately exit as soon as the example finishes all
>> the pages.
>> You can evidentiate the problem if you place a
>> sleep(10);
>> before
>> exit(0);
>> All the drivers correctly close the window after you right click
>> the window but wxwidgets.
> 
> Hi Fulvio:
> 
> The symptom I get here (for the case of sleep(2) before exit(0) for
> x01c.c) is that for the xwin, xcairo, and qtwidgets device drivers)
> right click or hitting the enter key immediately kills the window and
> then there is a two-second delay before command is returned to the
> command line.  For -dev wxwidgets, the two-second delay occurs while
> the window is still displayed which is a subtle difference but also
> unexpected.  Is that the difference you are referring to for the
> single plinit case?  If so, I have verified at least that part of the
> issue.
> 
>> This is not all the story, if you make
>> a double example, that is a single program that does two examples
>> one after the other, this breaks with segfaults before opening
>> the second window, I imagine at plinit.
>> This is what my example did:
>>
>> perlconsole
>> do 'x01.pl'
>> 12
>> press right mouse => window hangs
>> do 'x01.pl'
>> 12
>> 139% segmentation fault
>>
>> or
>> sbcl
>> (require :plplot-examples)
>> (plplot-examples::example1 "wxwidgets")
>>  ;; window hangs there
>> (plplot-examples::example1 "wxwidgets")
>>  ;; catches segfaults
> 
> These are poor examples in the sense that the perl and lisp bindings
> for PLplot are all external to the PLplot core development so PLplot
> core developers are not particularly familiar with those bindings.
> 
> So please send a temporary patch for a simple example (say for
> examples/c/x01c.c) that generates the segfault in the double plinit
> case for you for wxwidgets but not for other devices. That patch
> should help make it convenient for core PLplot developers to verify
> the issue.
> 
>>> So to pin down exactly what the issue is that you are seeing we need
>>> more information from you.  Are you using the svn trunk version of
>>> PLplot?  (If you are not trying that yet, please do so.) Do you get
>>> the issue you reported if you run exactly the above command?  What is
>>> your platform? What is your version of wxwidgets? What kind of
>>> wxwidgets device are you using?  (You can find that listed at the top
>>> of the wxwidgets GUI that is created by the above command, and in my
>>> case that answer is wxGC.)
> 
> Thanks for answering the platform question but please also answer the
> other questions as well.
> 
> Alan
> __________________________
> Alan W. Irwin
> 
> Astronomical research affiliation with Department of Physics and
> Astronomy,
> University of Victoria (astrowww.phys.uvic.ca).
> 
> Programming affiliations with the FreeEOS equation-of-state
> implementation for stellar interiors (freeeos.sf.net); the Time
> Ephemerides project (timeephem.sf.net); PLplot scientific plotting
> software package (plplot.sf.net); the libLASi project
> (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
> and the Linux Brochure Project (lbproject.sf.net).
> __________________________
> 
> Linux-powered Science
> __________________________
// $Id: x01c.c 11680 2011-03-27 17:57:51Z airwin $
//
//      Simple line plot and multiple windows demo.
//
// Copyright (C) 2004  Rafael Laboissiere
//
// This file is part of PLplot.
//
// PLplot is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as published
// by the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// PLplot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public License
// along with PLplot; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
//

#include "plcdemos.h"
#include "plevent.h"
#ifdef PL_HAVE_UNISTD_H
# include <unistd.h>
#endif

// Variables and data arrays used by plot generators

static PLFLT        x[101], y[101];
static PLFLT        xscale, yscale, xoff, yoff, xs[6], ys[6];
static PLGraphicsIn gin;

static int          locate_mode;
static int          test_xor;
static int          fontset = 1;
static char         *f_name = NULL;

// Options data structure definition.

static PLOptionTable options[] = {
    {
        "locate",               // Turns on test of API locate function
        NULL,
        NULL,
        &locate_mode,
        PL_OPT_BOOL,
        "-locate",
        "Turns on test of API locate function"
    },
    {
        "xor",                  // Turns on test of xor function
        NULL,
        NULL,
        &test_xor,
        PL_OPT_BOOL,
        "-xor",
        "Turns on test of XOR"
    },
    {
        "font",                 // For switching between font set 1 & 2
        NULL,
        NULL,
        &fontset,
        PL_OPT_INT,
        "-font number",
        "Selects stroke font set (0 or 1, def:1)"
    },
    {
        "save",                 // For saving in postscript
        NULL,
        NULL,
        &f_name,
        PL_OPT_STRING,
        "-save filename",
        "Save plot in color postscript `file'"
    },
    {
        NULL,                   // option
        NULL,                   // handler
        NULL,                   // client data
        NULL,                   // address of variable to set
        0,                      // mode flag
        NULL,                   // short syntax
        NULL
    }                           // long syntax
};

const char           *notes[] = { "Make sure you get it right!", NULL };

// Function prototypes

void plot1( int );
void plot2( void );
void plot3( void );

//--------------------------------------------------------------------------
// main
//
// Generates several simple line plots.  Demonstrates:
//   - subwindow capability
//   - setting up the window, drawing plot, and labelling
//   - changing the color
//   - automatic axis rescaling to exponential notation
//   - placing the axes in the middle of the box
//   - gridded coordinate axes
//--------------------------------------------------------------------------

void do_it_once () {
  PLINT digmax;
  plstar( 2, 2 );
  xscale = 6.;
  yscale = 1.;
  xoff   = 0.;
  yoff   = 0.;
  plot1( 0 );
  xscale = 1.;
  yscale = 0.0014;
  yoff   = 0.0185;
  digmax = 5;
  plsyax( digmax, 0 );
  
  plot1( 1 );
  
  plot2();
  
  plot3();
  
  plend();
}

int
main( int argc, const char *argv[] )
{

// plplot initialization

// Parse and process command line arguments

    plMergeOpts( options, "x01c options", notes );
    plparseopts( &argc, argv, PL_PARSE_FULL );
    do_it_once();
    do_it_once();
    sleep(3);
    printf("all fine\n");
    exit( 0 );
}

//--------------------------------------------------------------------------

void
plot1( int do_test )
{
    int   i;
    PLFLT xmin, xmax, ymin, ymax;

    for ( i = 0; i < 60; i++ )
    {
        x[i] = xoff + xscale * ( i + 1 ) / 60.0;
        y[i] = yoff + yscale * pow( x[i], 2. );
    }

    xmin = x[0];
    xmax = x[59];
    ymin = y[0];
    ymax = y[59];

    for ( i = 0; i < 6; i++ )
    {
        xs[i] = x[i * 10 + 3];
        ys[i] = y[i * 10 + 3];
    }

// Set up the viewport and window using PLENV. The range in X is
// 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are
// scaled separately (just = 0), and we just draw a labelled
// box (axis = 0).
//
    plcol0( 1 );
    plenv( xmin, xmax, ymin, ymax, 0, 0 );
    plcol0( 2 );
    pllab( "(x)", "(y)", "#frPLplot Example 1 - y=x#u2" );

// Plot the data points

    plcol0( 4 );
    plpoin( 6, xs, ys, 9 );

// Draw the line through the data

    plcol0( 3 );
    plline( 60, x, y );

// xor mode enable erasing a line/point/text by replotting it again
// it does not work in double buffering mode, however

    if ( do_test && test_xor )
    {
#ifdef PL_HAVE_USLEEP
        PLINT st;
        plxormod( 1, &st ); // enter xor mode
        if ( st )
        {
            for ( i = 0; i < 60; i++ )
            {
                plpoin( 1, x + i, y + i, 9 );   // draw a point
                usleep( 50000 );                // wait a little
                plflush();                      // force an update of the tk 
driver
                plpoin( 1, x + i, y + i, 9 );   // erase point
            }
            plxormod( 0, &st );                 // leave xor mode
        }
#else
        printf( "The -xor command line option can only be exercised if your "
            "system\nhas usleep(), which does not seem to happen.\n" );
#endif
    }
}

//--------------------------------------------------------------------------

void
plot2( void )
{
    int i;

// Set up the viewport and window using PLENV. The range in X is -2.0 to
// 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately
// (just = 0), and we draw a box with axes (axis = 1).
//
    plcol0( 1 );
    plenv( -2.0, 10.0, -0.4, 1.2, 0, 1 );
    plcol0( 2 );
    pllab( "(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function" );

// Fill up the arrays

    for ( i = 0; i < 100; i++ )
    {
        x[i] = ( i - 19.0 ) / 6.0;
        y[i] = 1.0;
        if ( x[i] != 0.0 )
            y[i] = sin( x[i] ) / x[i];
    }

// Draw the line

    plcol0( 3 );
    plwid( 2 );
    plline( 100, x, y );
    plwid( 1 );
}

//--------------------------------------------------------------------------

void
plot3( void )
{
    PLINT space0 = 0, mark0 = 0, space1 = 1500, mark1 = 1500;
    int   i;

// For the final graph we wish to override the default tick intervals, and
// so do not use plenv().
//
    pladv( 0 );

// Use standard viewport, and define X range from 0 to 360 degrees, Y range
// from -1.2 to 1.2.
//
    plvsta();
    plwind( 0.0, 360.0, -1.2, 1.2 );

// Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y.

    plcol0( 1 );
    plbox( "bcnst", 60.0, 2, "bcnstv", 0.2, 2 );

// Superimpose a dashed line grid, with 1.5 mm marks and spaces.
// plstyl expects a pointer!
//
    plstyl( 1, &mark1, &space1 );
    plcol0( 2 );
    plbox( "g", 30.0, 0, "g", 0.2, 0 );
    plstyl( 0, &mark0, &space0 );

    plcol0( 3 );
    pllab( "Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function" );

    for ( i = 0; i < 101; i++ )
    {
        x[i] = 3.6 * i;
        y[i] = sin( x[i] * M_PI / 180.0 );
    }

    plcol0( 4 );
    plline( 101, x, y );
}
------------------------------------------------------------------------------
The Go Parallel Website, sponsored by Intel - in partnership with Geeknet, 
is your hub for all things parallel software development, from weekly thought 
leadership blogs to news, videos, case studies, tutorials, tech docs, 
whitepapers, evaluation guides, and opinion stories. Check out the most 
recent posts - join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Plplot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to