diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/Makefile.am | 5 | ||||
-rw-r--r-- | mysys/my_os2file64.c | 16 | ||||
-rw-r--r-- | mysys/my_os2thread.c | 7 |
3 files changed, 22 insertions, 6 deletions
diff --git a/mysys/Makefile.am b/mysys/Makefile.am index 3ca07b7b80b..646bedf9603 100644 --- a/mysys/Makefile.am +++ b/mysys/Makefile.am @@ -21,7 +21,10 @@ INCLUDES = @MT_INCLUDES@ -I$(srcdir)/../include -I../include -I.. -I$(srcdir) pkglib_LIBRARIES = libmysys.a LDADD = libmysys.a ../dbug/libdbug.a \ ../strings/libmystrings.a -noinst_HEADERS = mysys_priv.h my_static.h +noinst_HEADERS = mysys_priv.h my_static.h \ + my_os2cond.c my_os2dirsrch.c my_os2dirsrch.h \ + my_os2dlfcn.c my_os2file64.c my_os2mutex.c \ + my_os2thread.c my_os2tls.c libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\ mf_path.c mf_loadpath.c\ my_open.c my_create.c my_dup.c my_seek.c my_read.c \ diff --git a/mysys/my_os2file64.c b/mysys/my_os2file64.c index b7ee40d292e..2f41d344e32 100644 --- a/mysys/my_os2file64.c +++ b/mysys/my_os2file64.c @@ -22,6 +22,7 @@ void _OS2errno( APIRET rc); longlong _lseek64( int fd, longlong offset, int seektype); int _lock64( int fd, int locktype, my_off_t start, my_off_t length, myf MyFlags); +int _sopen64( const char *name, int oflag, int shflag, int mask); // // this class is used to define a global c++ variable, that @@ -191,8 +192,17 @@ inline _SetFileLocksL(HFILE hFile, ULONG timeout, ULONG flags) { - if (_DosSetFileLocksL) - return _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags); + if (_DosSetFileLocksL) { + APIRET rc; + rc = _DosSetFileLocksL( hFile, pflUnlock, pflLock, timeout, flags); + + // on FAT/HPFS/LAN a INVALID_PARAMETER is returned, seems that + // only JFS can handle >2GB ranges. + if (rc != 87) + return rc; + + // got INVALID_PARAMETER, fallback to standard call + } FILELOCK flUnlock = { pflUnlock->lOffset, pflUnlock->lRange }; FILELOCK flLock = { pflLock->lOffset, pflLock->lRange }; @@ -254,7 +264,7 @@ int _lock64( int fd, int locktype, my_off_t start, return(-1); } -int _sopen( const char *name, int oflag, int shflag, int mask) +int sopen( const char *name, int oflag, int shflag, int mask) { int fail_errno; APIRET rc = 0; diff --git a/mysys/my_os2thread.c b/mysys/my_os2thread.c index 017ba7f316b..89a3311c10b 100644 --- a/mysys/my_os2thread.c +++ b/mysys/my_os2thread.c @@ -53,6 +53,7 @@ void win_pthread_init(void) static pthread_handler_decl(pthread_start,param) { + DBUG_ENTER("pthread_start"); pthread_handler func=((struct pthread_map *) param)->func; void *func_param=((struct pthread_map *) param)->param; my_thread_init(); /* Will always succeed in windows */ @@ -60,8 +61,10 @@ static pthread_handler_decl(pthread_start,param) win_pthread_self=((struct pthread_map *) param)->pthreadself; pthread_mutex_unlock(&THR_LOCK_thread); free((char*) param); /* Free param from create */ - pthread_exit((void*) (*func)(func_param)); - return 0; /* Safety */ + //pthread_exit((void*) (*func)(func_param)); + (*func)(func_param); + DBUG_RETURN(0); + //return 0; /* Safety */ } |