Commit 18f66e02 authored by unknown's avatar unknown

BUG#22301 ndb: File_class::size() is not thread safe


ndb/include/logger/FileLogHandler.hpp:
  use off_t for file offset
ndb/include/util/File.hpp:
  use off_t for returning file offset (size)
ndb/src/common/util/File.cpp:
  make File_class::size(FILE*) safe when having multiple threads writing to
  the file
parent b8244883
...@@ -102,7 +102,7 @@ private: ...@@ -102,7 +102,7 @@ private:
bool setMaxFiles(const BaseString &files); bool setMaxFiles(const BaseString &files);
int m_maxNoFiles; int m_maxNoFiles;
long m_maxFileSize; off_t m_maxFileSize;
unsigned int m_maxLogEntries; unsigned int m_maxLogEntries;
File_class* m_pLogFile; File_class* m_pLogFile;
}; };
......
...@@ -50,7 +50,7 @@ public: ...@@ -50,7 +50,7 @@ public:
* @param f a pointer to a FILE descriptor. * @param f a pointer to a FILE descriptor.
* @return the size of the file. * @return the size of the file.
*/ */
static long size(FILE* f); static off_t size(FILE* f);
/** /**
* Renames a file. * Renames a file.
...@@ -182,7 +182,7 @@ public: ...@@ -182,7 +182,7 @@ public:
* *
* @return the file size. * @return the file size.
*/ */
long size() const; off_t size() const;
/** /**
* Returns the filename. * Returns the filename.
......
...@@ -45,17 +45,16 @@ File_class::exists(const char* aFileName) ...@@ -45,17 +45,16 @@ File_class::exists(const char* aFileName)
return (my_stat(aFileName, &stmp, MYF(0))!=NULL); return (my_stat(aFileName, &stmp, MYF(0))!=NULL);
} }
long off_t
File_class::size(FILE* f) File_class::size(FILE* f)
{ {
long cur_pos = 0, length = 0; MY_STAT s;
cur_pos = ::ftell(f); // Note that my_fstat behaves *differently* than my_stat. ARGGGHH!
::fseek(f, 0, SEEK_END); if(my_fstat(::fileno(f), &s, MYF(0)))
length = ::ftell(f); return 0;
::fseek(f, cur_pos, SEEK_SET); // restore original position
return length; return s.st_size;
} }
bool bool
...@@ -168,8 +167,8 @@ File_class::writeChar(const char* buf) ...@@ -168,8 +167,8 @@ File_class::writeChar(const char* buf)
{ {
return writeChar(buf, 0, ::strlen(buf)); return writeChar(buf, 0, ::strlen(buf));
} }
long off_t
File_class::size() const File_class::size() const
{ {
return File_class::size(m_file); return File_class::size(m_file);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment