On Nov 14, 2013, at 5:28 AM, Andrew Ross <[email protected]> wrote:
> On Wednesday 13 Nov 2013 09:28:02 Hezekiah M. Carty wrote: >> On Tue, Nov 12, 2013 at 6:32 PM, Jerry <[email protected]> wrote: >>> I posted an announcement some time back on comp.lang.ada. about the latest >>> PLplot release. (FWIW, it currently has 182 views, and I got some useful >>> feedback from the Ada gurus.) >>> >>> Today this post (below) appeared. I don't know how to answer his question >>> about thread safety. Any thoughts? >>> >>> Jerry >>> >>> >>> >>> >>> Hi Jerry, >>> >>> That looks really interesting. >>> >>> I'm looking for a plotter routine that could be used safely inside the AWS >>> [= Ada Web Server] web server, so I can implement a 'callback' chart >>> server (currently I have one written in Java). >>> >>> Could this be used for that? Some simple tests suggest to me that it isn't >>> thread safe. The Initialize_PLplot [aka plinit] and associated >>> procedures to set filenames, etc, seem to set global variables somewhere. >>> Is there some trick I'm missing? >>> >>> It does make lovely looking charts. >>> >>> thanks very much for this. >>> >>> Graham >> >> PLplot is not thread safe. While you can use PLplot in a threaded >> program, only one thread per process may interact with PLplot at a >> given time. This limitation holds even if you are working with >> multiple plot streams in a single process. >> >> Regarding Alan's follow-up - while it is possible to make PLplot >> thread-safe, the changes required are invasive and pervasive. They >> are all good changes to make! But there is a lot to be done and the >> result is a completely backwards-incompatible API. The three big >> pieces required are: >> >> a) All PLplot functions will need to explicitly operate on a given >> plstream value representing the affected plot stream. This requires >> adding an additional stream argument to all PLplot functions and >> removing any global state from plot streams. >> b) Remove all of the globals used through the PLplot code base in the >> actual plotting logic. One example is the contour/shading routines >> which use several global variables to track their state. >> c) Confirm/ensure that each of our output devices can be and are used >> in a thread-safe manner. >> >> Each of these big pieces is made up of several smaller chunks. (a) is >> where the API breakage would come in. It is also likely the simplest >> (simple being relative here!) to complete. (b) could be pretty hairy >> as the logic in the contouring routines in particular is tricky to >> translate to something which doesn't use globals. (c) should be >> attainable for at least the Cairo, Qt and built-in output drivers >> (SVG, PS, null). I would be happy to help in putting together a plan >> for this work. Unfortunately my PLplot time is very limited these >> days so it's unlikely I'll be able to provide much development >> assistance. > > > I'd concur with what Hez said, however there is one further source of thread > problems - namely a number of the language bindings use globals to work round > passing things like function pointers between languages. This would also need > checking. > > This would be a useful, but substantive job. > > In terms of security we try to follow best practice in terms of checking > buffer > lengths, avoiding insecure library calls etc to avoid the obvious problems. > Newer versions of gcc / gnu ld are getting better at flagging some of these. > There is certainly no systematic attempt to harden plplot or fully check it > for potential security issues. > > Andrew > Thanks, Andrew. Jerry ------------------------------------------------------------------------------ DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access Free app hosting. Or install the open source package on any LAMP server. Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native! http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk _______________________________________________ Plplot-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/plplot-devel
