diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-10-04 11:47:17 +0200 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-10-04 11:47:17 +0200 |
commit | d1bdf9ea1195c5f81906631ab789cb741a96968c (patch) | |
tree | 50f5eb9218907dd07df3a6f7f15a8bbca9f8a99f /video/out/cocoa | |
parent | d10b8c7e84c8073ccf64d1371168f54b1c0db1f1 (diff) | |
download | mpv-d1bdf9ea1195c5f81906631ab789cb741a96968c.tar.bz2 mpv-d1bdf9ea1195c5f81906631ab789cb741a96968c.tar.xz |
cocoa: move to a simpler threading model
Unfortunately using dispatch_sync for synchronization turned out to be really
bad for us. It caused a wide array of race conditions, deadlocks, etc.
Moving to a very simple mutex. It's not clear to me how to do liveresizing
with this, for now it just flickers with is unacceptable (maybe I'll draw
black instead).
This should fix all the threading cocoa bugs. Reopen if it's not the case!
Fixes #751
Fixes #1129
Diffstat (limited to 'video/out/cocoa')
-rw-r--r-- | video/out/cocoa/mpvadapter.h | 3 | ||||
-rw-r--r-- | video/out/cocoa/view.m | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/video/out/cocoa/mpvadapter.h b/video/out/cocoa/mpvadapter.h index af536d2f56..205b2b1443 100644 --- a/video/out/cocoa/mpvadapter.h +++ b/video/out/cocoa/mpvadapter.h @@ -19,12 +19,13 @@ #include "video/out/vo.h" @interface MpvCocoaAdapter : NSObject +- (void)lock; +- (void)unlock; - (void)setNeedsResize; - (void)signalMouseMovement:(NSPoint)point; - (void)putKey:(int)mpkey withModifiers:(int)modifiers; - (void)putAxis:(int)mpkey delta:(float)delta; - (void)putCommand:(char*)cmd; -- (void)performAsyncResize:(NSSize)size; - (void)handleFilesArray:(NSArray *)files; - (void)didChangeWindowedScreenProfile:(NSScreen *)screen; diff --git a/video/out/cocoa/view.m b/video/out/cocoa/view.m index f5b69a7fbc..0c5a92123e 100644 --- a/video/out/cocoa/view.m +++ b/video/out/cocoa/view.m @@ -229,8 +229,9 @@ - (void)drawRect:(NSRect)rect { - [self.adapter performAsyncResize:[self frameInPixels].size]; + [self.adapter lock]; [self.adapter setNeedsResize]; + [self.adapter unlock]; } - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender |