diff options
author | monty@donna.mysql.com <> | 2000-12-18 16:09:19 +0200 |
---|---|---|
committer | monty@donna.mysql.com <> | 2000-12-18 16:09:19 +0200 |
commit | 155823ad5118be2fe50d9ef705bc5d627b7333b0 (patch) | |
tree | c93d85948282e07d8ce6727243cecb6a03d0335f /mysys | |
parent | 5cce198b6959a910925bf90c5abfb2275bff1891 (diff) | |
download | mariadb-git-155823ad5118be2fe50d9ef705bc5d627b7333b0.tar.gz |
Lots of new benchmark runs
Remember filename for temporary files created with mkstemp
Fixed wrongly allocated BDB share structure
Cleanups for SunPRO
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/mf_tempfile.c | 12 | ||||
-rw-r--r-- | mysys/my_create.c | 37 | ||||
-rw-r--r-- | mysys/my_open.c | 84 |
3 files changed, 59 insertions, 74 deletions
diff --git a/mysys/mf_tempfile.c b/mysys/mf_tempfile.c index c9b60c87ef3..a12b4326705 100644 --- a/mysys/mf_tempfile.c +++ b/mysys/mf_tempfile.c @@ -88,6 +88,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix, { char prefix_buff[30]; uint pfx_len; + File org_file; pfx_len=(strmov(strnmov(prefix_buff, prefix ? prefix : "tmp.", @@ -101,7 +102,16 @@ File create_temp_file(char *to, const char *dir, const char *prefix, } strmov(to,dir); strmov(convert_dirname(to),prefix_buff); - file=mkstemp(to); + org_file=mkstemp(to); + file=my_register_filename(org_file, to, FILE_BY_MKSTEMP, + EE_CANTCREATEFILE, MyFlags); + /* If we didn't manage to register the name, remove the temp file */ + if (org_file >= 0 && file < 0) + { + int tmp=my_errno; + (void) my_delete(to, MYF(MY_WME | ME_NOINPUT)); + my_errno=tmp; + } } #elif defined(HAVE_TEMPNAM) { diff --git a/mysys/my_create.c b/mysys/my_create.c index 8273170fc0a..ee5d9aa41f3 100644 --- a/mysys/my_create.c +++ b/mysys/my_create.c @@ -59,39 +59,6 @@ File my_create(const char *FileName, int CreateFlags, int access_flags, fd = open(FileName, access_flags); #endif - if (fd >= 0) - { - if ((int) fd >= MY_NFILE) - { -#if defined(THREAD) && !defined(HAVE_PREAD) - (void) my_close(fd,MyFlags); - my_errno=EMFILE; - if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - my_error(EE_OUT_OF_FILERESOURCES, MYF(ME_BELL+ME_WAITTANG), - FileName, my_errno); - DBUG_RETURN(-1); -#else - thread_safe_increment(my_file_opened,&THR_LOCK_open); - DBUG_PRINT("exit",("fd: %d",fd)); - DBUG_RETURN(fd); /* safeguard */ -#endif - } - if ((my_file_info[fd].name = (char*) my_strdup(FileName,MyFlags))) - { - my_file_opened++; - my_file_info[fd].type = FILE_BY_CREATE; -#if defined(THREAD) && !defined(HAVE_PREAD) - pthread_mutex_init(&my_file_info[fd].mutex,NULL); -#endif - DBUG_PRINT("exit",("fd: %d",fd)); - DBUG_RETURN(fd); - } - VOID(my_close(fd,MyFlags)); - my_errno=ENOMEM; - } - else - my_errno=errno; - if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - my_error(EE_CANTCREATEFILE, MYF(ME_BELL+ME_WAITTANG), FileName,my_errno); - DBUG_RETURN(-1); + DBUG_RETURN(my_register_filename(fd, FileName, FILE_BY_CREATE, + EE_CANTCREATEFILE, MyFlags)); } /* my_create */ diff --git a/mysys/my_open.c b/mysys/my_open.c index a8dbe86989b..1bca4d9cccd 100644 --- a/mysys/my_open.c +++ b/mysys/my_open.c @@ -47,7 +47,44 @@ File my_open(const char *FileName, int Flags, myf MyFlags) #else fd = open((my_string) FileName, Flags); #endif + DBUG_RETURN(my_register_filename(fd, FileName, FILE_BY_OPEN, + EE_FILENOTFOUND, MyFlags)); +} /* my_open */ + + + /* Close a file */ + +int my_close(File fd, myf MyFlags) +{ + int err; + DBUG_ENTER("my_close"); + DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); + + pthread_mutex_lock(&THR_LOCK_open); + if ((err = close(fd))) + { + DBUG_PRINT("error",("Got error %d on close",err)); + my_errno=errno; + if (MyFlags & (MY_FAE | MY_WME)) + my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),my_filename(fd),errno); + } + if ((uint) fd < MY_NFILE && my_file_info[fd].type != UNOPEN) + { + my_free(my_file_info[fd].name, MYF(0)); +#if defined(THREAD) && !defined(HAVE_PREAD) + pthread_mutex_destroy(&my_file_info[fd].mutex); +#endif + my_file_info[fd].type = UNOPEN; + my_file_opened--; + } + pthread_mutex_unlock(&THR_LOCK_open); + DBUG_RETURN(err); +} /* my_close */ + +File my_register_filename(File fd, const char *FileName, enum file_type + type_of_file, uint error_message_number, myf MyFlags) +{ if ((int) fd >= 0) { if ((int) fd >= MY_NFILE) @@ -58,62 +95,33 @@ File my_open(const char *FileName, int Flags, myf MyFlags) if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) my_error(EE_OUT_OF_FILERESOURCES, MYF(ME_BELL+ME_WAITTANG), FileName, my_errno); - DBUG_RETURN(-1); + return(-1); #else thread_safe_increment(my_file_opened,&THR_LOCK_open); #endif - DBUG_RETURN(fd); /* safeguard */ + return(fd); /* safeguard */ } pthread_mutex_lock(&THR_LOCK_open); if ((my_file_info[fd].name = (char*) my_strdup(FileName,MyFlags))) { my_file_opened++; - my_file_info[fd].type = FILE_BY_OPEN; + my_file_info[fd].type = type_of_file; #if defined(THREAD) && !defined(HAVE_PREAD) pthread_mutex_init(&my_file_info[fd].mutex,NULL); #endif pthread_mutex_unlock(&THR_LOCK_open); DBUG_PRINT("exit",("fd: %d",fd)); - DBUG_RETURN(fd); + return(fd); } pthread_mutex_unlock(&THR_LOCK_open); - (void) my_close(fd,MyFlags); + (void) my_close(fd, MyFlags); my_errno=ENOMEM; } else my_errno=errno; DBUG_PRINT("error",("Got error %d on open",my_errno)); if (MyFlags & (MY_FFNF | MY_FAE | MY_WME)) - my_error(EE_FILENOTFOUND, MYF(ME_BELL+ME_WAITTANG), FileName,my_errno); - DBUG_RETURN(fd); -} /* my_open */ - - - /* Close a file */ - -int my_close(File fd, myf MyFlags) -{ - int err; - DBUG_ENTER("my_close"); - DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); - - pthread_mutex_lock(&THR_LOCK_open); - if ((err = close(fd))) - { - DBUG_PRINT("error",("Got error %d on close",err)); - my_errno=errno; - if (MyFlags & (MY_FAE | MY_WME)) - my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),my_filename(fd),errno); - } - if ((uint) fd < MY_NFILE && my_file_info[fd].type != UNOPEN) - { - my_free(my_file_info[fd].name, MYF(0)); -#if defined(THREAD) && !defined(HAVE_PREAD) - pthread_mutex_destroy(&my_file_info[fd].mutex); -#endif - my_file_info[fd].type = UNOPEN; - my_file_opened--; - } - pthread_mutex_unlock(&THR_LOCK_open); - DBUG_RETURN(err); -} /* my_close */ + my_error(error_message_number, MYF(ME_BELL+ME_WAITTANG), + FileName, my_errno); + return(fd); +} |