Protects the file class with rw-locks.
BUG=300 Review URL: https://webrtc-codereview.appspot.com/841004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2823 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "file_impl.h"
|
||||
#include "system_wrappers/source/file_impl.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#include "system_wrappers/interface/rw_lock_wrapper.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
FileWrapper* FileWrapper::Create()
|
||||
@ -27,7 +29,8 @@ FileWrapper* FileWrapper::Create()
|
||||
}
|
||||
|
||||
FileWrapperImpl::FileWrapperImpl()
|
||||
: _id(NULL),
|
||||
: _rwLock(RWLockWrapper::CreateRWLock()),
|
||||
_id(NULL),
|
||||
_open(false),
|
||||
_looping(false),
|
||||
_readOnly(false),
|
||||
@ -47,6 +50,7 @@ FileWrapperImpl::~FileWrapperImpl()
|
||||
|
||||
int FileWrapperImpl::CloseFile()
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if (_id != NULL)
|
||||
{
|
||||
fclose(_id);
|
||||
@ -59,6 +63,7 @@ int FileWrapperImpl::CloseFile()
|
||||
|
||||
int FileWrapperImpl::Rewind()
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if(_looping || !_readOnly)
|
||||
{
|
||||
if (_id != NULL)
|
||||
@ -72,12 +77,14 @@ int FileWrapperImpl::Rewind()
|
||||
|
||||
int FileWrapperImpl::SetMaxFileSize(size_t bytes)
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
_maxSizeInBytes = bytes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int FileWrapperImpl::Flush()
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if (_id != NULL)
|
||||
{
|
||||
return fflush(_id);
|
||||
@ -88,6 +95,7 @@ int FileWrapperImpl::Flush()
|
||||
int FileWrapperImpl::FileName(char* fileNameUTF8,
|
||||
size_t size) const
|
||||
{
|
||||
ReadLockScoped read(*_rwLock);
|
||||
size_t length = strlen(_fileNameUTF8);
|
||||
if(length > kMaxFileNameSize)
|
||||
{
|
||||
@ -111,12 +119,14 @@ int FileWrapperImpl::FileName(char* fileNameUTF8,
|
||||
|
||||
bool FileWrapperImpl::Open() const
|
||||
{
|
||||
ReadLockScoped read(*_rwLock);
|
||||
return _open;
|
||||
}
|
||||
|
||||
int FileWrapperImpl::OpenFile(const char *fileNameUTF8, bool readOnly,
|
||||
bool loop, bool text)
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
size_t length = strlen(fileNameUTF8);
|
||||
if (length > kMaxFileNameSize - 1)
|
||||
{
|
||||
@ -189,6 +199,7 @@ int FileWrapperImpl::OpenFile(const char *fileNameUTF8, bool readOnly,
|
||||
|
||||
int FileWrapperImpl::Read(void* buf, int length)
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if (length < 0)
|
||||
return -1;
|
||||
|
||||
@ -205,6 +216,7 @@ int FileWrapperImpl::Read(void* buf, int length)
|
||||
|
||||
int FileWrapperImpl::WriteText(const char* format, ...)
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if (format == NULL)
|
||||
return -1;
|
||||
|
||||
@ -232,6 +244,7 @@ int FileWrapperImpl::WriteText(const char* format, ...)
|
||||
|
||||
bool FileWrapperImpl::Write(const void* buf, int length)
|
||||
{
|
||||
WriteLockScoped write(*_rwLock);
|
||||
if (buf == NULL)
|
||||
return false;
|
||||
|
||||
|
@ -11,12 +11,16 @@
|
||||
#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
|
||||
#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
|
||||
|
||||
#include "file_wrapper.h"
|
||||
#include "system_wrappers/interface/file_wrapper.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "system_wrappers/interface/scoped_ptr.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class RWLockWrapper;
|
||||
|
||||
class FileWrapperImpl : public FileWrapper
|
||||
{
|
||||
public:
|
||||
@ -43,6 +47,8 @@ public:
|
||||
virtual int Rewind();
|
||||
|
||||
private:
|
||||
scoped_ptr<RWLockWrapper> _rwLock;
|
||||
|
||||
FILE* _id;
|
||||
bool _open;
|
||||
bool _looping;
|
||||
|
Reference in New Issue
Block a user