Skip to content

Commit

Permalink
booru/image: Clean up thumbnail curler immediately, fix #34
Browse files Browse the repository at this point in the history
Curl keeps a fd open until curl_*_cleanup is called.  This could also be
prevented by setting CURLOPT_FORBID_REUSE, but the curler object isn't
needed once get_thumbnail finishes.
  • Loading branch information
ahodesuka committed Nov 27, 2017
1 parent 6dbe423 commit 5df3f53
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
11 changes: 6 additions & 5 deletions src/booru/image.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ Image::Image(const std::string &path, const std::string &url,
m_Tags(tags),
m_Page(page),
m_Curler(m_Url),
m_ThumbnailCurler(m_ThumbnailUrl),
m_ThumbnailCurler(new Curler(m_ThumbnailUrl)),
m_PixbufError(false)
{
m_SignalThumbnailLoaded.connect([ this ] { m_ThumbnailCurler.reset(nullptr); });
m_ThumbnailPath = thumbPath;

if (!m_isWebM)
Expand Down Expand Up @@ -49,9 +50,9 @@ const Glib::RefPtr<Gdk::Pixbuf>& Image::get_thumbnail()
{
if (!m_ThumbnailPixbuf)
{
if (m_ThumbnailCurler.perform())
if (m_ThumbnailCurler->perform())
{
m_ThumbnailCurler.save_file(m_ThumbnailPath);
m_ThumbnailCurler->save_file(m_ThumbnailPath);

m_ThumbnailLock.writer_lock();
try
Expand All @@ -68,13 +69,13 @@ const Glib::RefPtr<Gdk::Pixbuf>& Image::get_thumbnail()
else
{
std::cerr << "Error while downloading thumbnail " << m_ThumbnailUrl
<< " " << std::endl << " " << m_ThumbnailCurler.get_error() << std::endl;
<< " " << std::endl << " " << m_ThumbnailCurler->get_error() << std::endl;
m_ThumbnailLock.writer_lock();
m_ThumbnailPixbuf = get_missing_pixbuf();
m_ThumbnailLock.writer_unlock();
}

m_ThumbnailCurler.clear();
m_SignalThumbnailLoaded();
}

return m_ThumbnailPixbuf;
Expand Down
4 changes: 3 additions & 1 deletion src/booru/image.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ namespace AhoViewer

time_point_t m_LastDraw;

Curler m_Curler, m_ThumbnailCurler;
Curler m_Curler;
std::unique_ptr<Curler> m_ThumbnailCurler;
Glib::Dispatcher m_SignalThumbnailLoaded;
Glib::RefPtr<Gdk::PixbufLoader> m_Loader;
bool m_PixbufError;
Glib::Threads::RWLock m_ThumbnailLock;
Expand Down

0 comments on commit 5df3f53

Please sign in to comment.