Ticket UUID: | 878333 | |||
Title: | workaround for buggy(??) mkstemp() on IRIX systems | |||
Type: | Bug | Version: | obsolete: 8.4.5 | |
Submitter: | sussner | Created on: | 2004-01-16 15:25:54 | |
Subsystem: | 37. File System | Assigned To: | dkf | |
Priority: | 8 | Severity: | ||
Status: | Closed | Last Modified: | 2009-01-02 23:47:22 | |
Resolution: | Fixed | Closed By: | dkf | |
Closed on: | 2009-01-02 16:47:22 | |||
Description: |
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. | |||
User Comments: |
dkf added on 2009-01-02 23:47:22:
Now that we have compat/mkstemp.c, fix is trivial. Done for 8.6 release. r_zaumseil added on 2007-03-05 16:31:15: Logged In: YES user_id=1735474 Originator: NO I had the same problems in creating and using tclkits under IRIX. To avoid this I had to manually patch the tcl sources. Why not add the patch for IRIX? rene [email protected] jenglish added on 2006-03-11 00:49:56: Logged In: YES user_id=68433 Still not fixed. The TIP#210 implementation will provide what's needed to solve the problem. dgp added on 2006-03-10 13:48:17: Logged In: YES user_id=80530 status? jenglish added on 2004-02-24 02:28:49: Logged In: YES user_id=68433 Changing the API to return an open channel handle as well as the filename would also work (just that it's usually good practice to change the name of a function when you change its semantics). But TclpTempFileName() as currently specified cannot be implemented correctly and cannot be used safely. dkf added on 2004-02-23 18:50:09: Logged In: YES user_id=79902 AIUI, what we need to do is to get the temporary file name back and at the same time have the temporary file open for modification (keeping it open stops some security-related race conditions). BTW, I think I do not agree with removing TclpTempFileName() (though altering its API sounds like a good thing) since it might well end up being useful elsewhere in the core in the future (e.g. for loading Win icons and cursors from starkits.) vincentdarley added on 2004-02-23 18:11:46: 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 !?!? jenglish added on 2004-02-21 06:24: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! jenglish added on 2004-02-21 06:10:37: 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. dkf added on 2004-01-17 08:10:07: Logged In: YES user_id=79902 Assigning to myself because I've got access to IRIX systems vincentdarley added on 2004-01-17 07:16:19: Logged In: YES user_id=32170 Assigned to someone who knows more about Unix ;-) sussner added on 2004-01-16 22:25:55: File Added - 73709: tclUnixPipe.diff |
Attachments:
- tclUnixPipe.diff [download] added by sussner on 2004-01-16 22:25:55. [details]