diff options
author | unknown <gni/root@ts3-168.ts.cn.tlan> | 2006-12-01 11:24:28 +0800 |
---|---|---|
committer | unknown <gni/root@ts3-168.ts.cn.tlan> | 2006-12-01 11:24:28 +0800 |
commit | 4db3e9e15852340c31a17a88151c27ed5cdb986a (patch) | |
tree | 186de50ac977040a1c18684abede38cd9c22d7d3 /ndb | |
parent | 142a4485947b6f0af2ae010e59e723584197b6a0 (diff) | |
parent | 5df6fc3378a979a5a0fa81d3fe6fb68bab3dbb5e (diff) | |
download | mariadb-git-4db3e9e15852340c31a17a88151c27ed5cdb986a.tar.gz |
Merge ts3-168.ts.cn.tlan:/home/ngb/mysql/mysql-4.1/mysql-4.1-ndb-bj
into ts3-168.ts.cn.tlan:/home/ngb/mysql/mysql-4.1/mysql-4.1-ndb
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/common/util/File.cpp | 18 | ||||
-rw-r--r-- | ndb/src/kernel/vm/SimulatedBlock.cpp | 14 |
2 files changed, 23 insertions, 9 deletions
diff --git a/ndb/src/common/util/File.cpp b/ndb/src/common/util/File.cpp index 12626f29e7d..00741d3a576 100644 --- a/ndb/src/common/util/File.cpp +++ b/ndb/src/common/util/File.cpp @@ -123,13 +123,25 @@ bool File_class::close() { bool rc = true; + int retval = 0; + if (m_file != NULL) { ::fflush(m_file); - rc = (::fclose(m_file) == 0 ? true : false); - m_file = NULL; // Try again? + retval = ::fclose(m_file); + while ( (retval != 0) && (errno == EINTR) ){ + retval = ::fclose(m_file); + } + if( retval == 0){ + rc = true; + } + else { + rc = false; + ndbout_c("ERROR: Close file error in File.cpp for %s",strerror(errno)); + } } - + m_file = NULL; + return rc; } diff --git a/ndb/src/kernel/vm/SimulatedBlock.cpp b/ndb/src/kernel/vm/SimulatedBlock.cpp index 9b52ac65331..d5ba3ac63c1 100644 --- a/ndb/src/kernel/vm/SimulatedBlock.cpp +++ b/ndb/src/kernel/vm/SimulatedBlock.cpp @@ -658,24 +658,26 @@ SimulatedBlock::allocRecord(const char * type, size_t s, size_t n, bool clear) void * p = NULL; size_t size = n*s; + Uint64 real_size = (Uint64)((Uint64)n)*((Uint64)s); refresh_watch_dog(); - if (size > 0){ + if (real_size > 0){ #ifdef VM_TRACE_MEM - ndbout_c("%s::allocRecord(%s, %u, %u) = %u bytes", + ndbout_c("%s::allocRecord(%s, %u, %u) = %llu bytes", getBlockName(number()), type, s, n, - size); + real_size); #endif - p = NdbMem_Allocate(size); + if( real_size == (Uint64)size ) + p = NdbMem_Allocate(size); if (p == NULL){ char buf1[255]; char buf2[255]; BaseString::snprintf(buf1, sizeof(buf1), "%s could not allocate memory for %s", getBlockName(number()), type); - BaseString::snprintf(buf2, sizeof(buf2), "Requested: %ux%u = %u bytes", - (Uint32)s, (Uint32)n, (Uint32)size); + BaseString::snprintf(buf2, sizeof(buf2), "Requested: %ux%u = %llu bytes", + (Uint32)s, (Uint32)n, (Uint64)real_size); ERROR_SET(fatal, ERR_MEMALLOC, buf1, buf2); } |