fix

for some reason the QT on windows doesn't allow mutex
which wasn't locked to be unlocked, even if it's
recursive which is kind of against its design, so
we need to reimplement the recursive mutex using own
solution until this is fixed in windows QT