Make a separate MediaPlayer2Base::NotifyCallback
This avoids the collision with notify_callback_f.
Also, this CL should fix the potential use-after-free in notify().
Test: Builds properly
Bug: 70546581
Change-Id: Ia4919522d00c94591d6f14a27cb6465a8c4efaeb
diff --git a/media/libmedia/MediaPlayer2Manager.h b/media/libmedia/MediaPlayer2Manager.h
index b346f40..8f0c491 100644
--- a/media/libmedia/MediaPlayer2Manager.h
+++ b/media/libmedia/MediaPlayer2Manager.h
@@ -46,20 +46,22 @@
#if CALLBACK_ANTAGONIZER
class Antagonizer {
public:
- Antagonizer(notify_callback_f cb, void* client);
+ Antagonizer(
+ MediaPlayer2Base::NotifyCallback cb,
+ const wp<MediaPlayer2Engine> &client);
void start() { mActive = true; }
void stop() { mActive = false; }
void kill();
private:
static const int interval;
Antagonizer();
- static int callbackThread(void* cookie);
- Mutex mLock;
- Condition mCondition;
- bool mExit;
- bool mActive;
- void* mClient;
- notify_callback_f mCb;
+ static int callbackThread(void *cookie);
+ Mutex mLock;
+ Condition mCondition;
+ bool mExit;
+ bool mActive;
+ wp<MediaPlayer2Engine> mClient;
+ MediaPlayer2Base::NotifyCallback mCb;
};
#endif
@@ -301,7 +303,7 @@
status_t setDataSource_post(const sp<MediaPlayer2Base>& p,
status_t status);
- static void notify(void* cookie, int msg,
+ static void notify(const wp<MediaPlayer2Engine> &listener, int msg,
int ext1, int ext2, const Parcel *obj);
pid_t pid() const { return mPid; }