ES-DE/es-core/src/AsyncHandle.h
Jesper Ek 1e320b7718 Fixes two memory leaks, which caused the scraper to crash after a while. I believe this fixes #180.
Fixes #352 (duplicate).
Fixes #362 (duplicate).

The destructor for AsyncHandle needs to be virtual as its subclasses are
allocated dynamically. I believe this caused the ImageDownloadHandle and its
related resources (such as the HttpReq and its contents) not to be freed
correctly.
2015-02-09 23:23:36 +01:00

45 lines
985 B
C++

#pragma once
enum AsyncHandleStatus
{
ASYNC_IN_PROGRESS,
ASYNC_ERROR,
ASYNC_DONE
};
// Handle for some asynchronous operation.
class AsyncHandle
{
public:
AsyncHandle() : mStatus(ASYNC_IN_PROGRESS) {};
virtual ~AsyncHandle() {};
virtual void update() = 0;
// Update and return the latest status.
inline AsyncHandleStatus status() { update(); return mStatus; }
// User-friendly string of our current status. Will return error message if status() == SEARCH_ERROR.
inline std::string getStatusString()
{
switch(mStatus)
{
case ASYNC_IN_PROGRESS:
return "in progress";
case ASYNC_ERROR:
return mError;
case ASYNC_DONE:
return "done";
default:
return "something impossible has occured; row, row, fight the power";
}
}
protected:
inline void setStatus(AsyncHandleStatus status) { mStatus = status; }
inline void setError(const std::string& error) { setStatus(ASYNC_ERROR); mError = error; }
std::string mError;
AsyncHandleStatus mStatus;
};