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

parent 3dbc3247
......@@ -102,7 +102,7 @@ private:
bool setMaxFiles(const BaseString &files);
int m_maxNoFiles;
long m_maxFileSize;
off_t m_maxFileSize;
unsigned int m_maxLogEntries;
File_class* m_pLogFile;
};
......
......@@ -50,7 +50,7 @@ public:
* @param f a pointer to a FILE descriptor.
* @return the size of the file.
*/
static long size(FILE* f);
static off_t size(FILE* f);
/**
* Renames a file.
......@@ -182,7 +182,7 @@ public:
*
* @return the file size.
*/
long size() const;
off_t size() const;
/**
* Returns the filename.
......
......@@ -45,17 +45,16 @@ File_class::exists(const char* aFileName)
return (my_stat(aFileName, &stmp, MYF(0))!=NULL);
}
long
off_t
File_class::size(FILE* f)
{
long cur_pos = 0, length = 0;
cur_pos = ::ftell(f);
::fseek(f, 0, SEEK_END);
length = ::ftell(f);
::fseek(f, cur_pos, SEEK_SET); // restore original position
MY_STAT s;
// Note that my_fstat behaves *differently* than my_stat. ARGGGHH!
if(my_fstat(::fileno(f), &s, MYF(0)))
return 0;
return length;
return s.st_size;
}
bool
......@@ -168,8 +167,8 @@ File_class::writeChar(const char* buf)
{
return writeChar(buf, 0, ::strlen(buf));
}
long
off_t
File_class::size() const
{
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