> On April 24, 2016, 1:57 nachm., David Faure wrote:
> > Better, but I'm still wary of the reentrancy due to the nested event loop 
> > usage.
> > 
> > I bet this leads to a complete deadlock:
> > 
> >     QTimer::singleShot(0, this, SLOT(launchConversion()));
> >     launchConversion();
> > 
> > where launchConversion() triggers the KUnitConversion code that this patch 
> > is about.
> > 
> > While waiting for the first conversion, the timer will fire (given the 
> > nested QEventLoop usage), and we'll enter this code again, and hit 
> > mutex.lock(), and then wait forever, since we'll never go back to the event 
> > loop to finish the first conversion and unlock the mutex.
> > 
> > Maybe the mutex can be removed, actually. All that needs to be done is for 
> > m_update to be turned into a local variable (there's no reason for it to be 
> > a member variable, right?). The QSaveFile usage fixes the case where two 
> > threads would write to m_cache at the same time, or the case where one 
> > writes and one reads. Or is the mutex needed for the if() at the top? In 
> > any case I recommend not holding the mutex while being in the event loop.
> > 
> > Sorry for not realizing this earlier.

>From what I can tell the m_update is so it updates it either on first run or 
>when the cache file is outdated/missing. I don't know the internals of 
>KUnitConversion, ie. if an instance of Currency is shared or not, and how to 
>ensure that for subsequent runs of convert() I don't needlessly probe the 
>cache file again.

The m_cache variable could also be made local to the convert() function.


- Kai Uwe


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/127251/#review94808
-----------------------------------------------------------


On April 24, 2016, 1:26 nachm., Kai Uwe Broulik wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/127251/
> -----------------------------------------------------------
> 
> (Updated April 24, 2016, 1:26 nachm.)
> 
> 
> Review request for KDE Frameworks and Vishesh Handa.
> 
> 
> Bugs: 345750
>     https://bugs.kde.org/show_bug.cgi?id=345750
> 
> 
> Repository: kunitconversion
> 
> 
> Description
> -------
> 
> QNetworkReply does not implement waitForReadyRead
> 
> Also, the code never actually created the cache dir it was trying to create a 
> file in.
> 
> 
> Diffs
> -----
> 
>   src/currency.cpp ad325d8 
> 
> Diff: https://git.reviewboard.kde.org/r/127251/diff/
> 
> 
> Testing
> -------
> 
> Works now. It's downloaded once and then taken from cache file in 
> ~/.local/share/libkunitconversion/currency.xml
> 
> Given it's a Tier 2 framework doesn't make sense to add KIO now, also failed 
> to reproduce the crashes mentioned in the code.
> 
> Tests pass (only if I run them on English locale btw)
> 
> Obviously not happy with this being sync but alas that's how the API works.
> 
> Not sure if this is a KRunner bug or KUnitConverison but if I enter "5 USD" 
> it converts fine, if I enter "5 usd" it returns zero for all the currencies 
> it converted to.
> 
> 
> Thanks,
> 
> Kai Uwe Broulik
> 
>

_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel

Reply via email to