#2575 workaround for buggy(??) mkstemp() on IRIX systems

obsolete: 8.4.5
closed-fixed
8
2009-01-02
2004-01-16
Gerd Sussner
No

This bug concerns only IRIX systems (6.5.19m) so far.

Using a tclkit with included dynamic libraries results
in the following
error message when loading a second dynamic library
from the vfs:

> tclkit-irix
% package require Itcl
3.3
% package require Tk
couldn't find procedure Tk_Init
%

I tracked it down to the temporary filename create
mkstemp() in
TclpTempFileName() in tclUnixPipe.c. mkstemp() always
uses the
same filename, but keeps the content of the first file
copied into
it. I.e. a second call of TclCrossFilesystemCopy()
means that the
content of the first call is still present causing
TclpFindSymbol() not
to find the <EXT>_Init() procedure.
Adding a counter to the temporary filename solves this
problem. I
submit a patch as well.

hope that helps

gerd

ps: i just wonder whether i am the first one, using
tclkits under IRIX.

Discussion

1 2 > >> (Page 1 of 2)
  • Gerd Sussner
    Gerd Sussner
    2004-01-16

    patch to fix problem with temp. filenames on IRIX

     
    Attachments
  • Vince Darley
    Vince Darley
    2004-01-17

    • assigned_to: vincentdarley --> dgp
     
  • Vince Darley
    Vince Darley
    2004-01-17

    Logged In: YES
    user_id=32170

    Assigned to someone who knows more about Unix ;-)

     
    • assigned_to: dgp --> dkf
     
  • Logged In: YES
    user_id=79902

    Assigning to myself because I've got access to IRIX systems

     
  • Joe English
    Joe English
    2004-02-20

    Logged In: YES
    user_id=68433

    This looks more like a bug in TclpTempFileName() -- it calls
    mkstemp() to generate a temporary file, but then deletes the
    file and closes the file descriptor. So a subsequent call
    to mkstemp() can use the same filename, as it's still unique.

    As a matter of fact, TclpTempFileName() is Broken As
    Designed: there is no safe way to generate a temporary file
    name without creating the file at the same time; otherwise
    you suffer a race condition.

     
  • Joe English
    Joe English
    2004-02-20

    • assigned_to: dkf --> vincentdarley
     
  • Joe English
    Joe English
    2004-02-20

    Logged In: YES
    user_id=68433

    It looks like Tcl_FSLoadFile() is the only caller of
    TclpTempFileName() in the core. This should be fixed, and
    TclpTempFileName() removed. Back to you, Vince!

     
  • Vince Darley
    Vince Darley
    2004-02-23

    • assigned_to: vincentdarley --> jenglish
     
  • Vince Darley
    Vince Darley
    2004-02-23

    Logged In: YES
    user_id=32170

    It looks as if Tcl_FSLoadFile doesn't mind if the return
    value of TclpTempFileName exists or not, so perhaps that
    function can be changed not to delete the file? Or it
    should be changed to ensure it always creates a new empty
    name with an empty file?

    I don't quite understand what Joe is suggesting... How can
    we get rid of TclpTempFileName()? It's needed by
    Tcl_FSLoadFile... I can understand that we might want to
    fix TclpTempFileName() and/or adjust how it is called, what
    it returns, but _remove_ it !?!?

     
1 2 > >> (Page 1 of 2)