Handle setDataSource failures properly. #5261671

Change-Id: Iea0aa474d1939db23da9aabdfae2081e834f30d9
diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp
index 0fc6a8a..37a82e9 100644
--- a/media/libmedia/mediaplayer.cpp
+++ b/media/libmedia/mediaplayer.cpp
@@ -148,10 +148,10 @@
         const sp<IMediaPlayerService>& service(getMediaPlayerService());
         if (service != 0) {
             sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
-            err = attachNewPlayer(player);
-            if (err == NO_ERROR) {
-                err = mPlayer->setDataSource(url, headers);
+            if (NO_ERROR != player->setDataSource(url, headers)) {
+                player.clear();
             }
+            err = attachNewPlayer(player);
         }
     }
     return err;
@@ -164,10 +164,10 @@
     const sp<IMediaPlayerService>& service(getMediaPlayerService());
     if (service != 0) {
         sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
-        err = attachNewPlayer(player);
-        if (err == NO_ERROR) {
-            err = mPlayer->setDataSource(fd, offset, length);
+        if (NO_ERROR != player->setDataSource(fd, offset, length)) {
+            player.clear();
         }
+        err = attachNewPlayer(player);
     }
     return err;
 }
@@ -179,10 +179,10 @@
     const sp<IMediaPlayerService>& service(getMediaPlayerService());
     if (service != 0) {
         sp<IMediaPlayer> player(service->create(getpid(), this, mAudioSessionId));
-        err = attachNewPlayer(player);
-        if (err == NO_ERROR) {
-            err = mPlayer->setDataSource(source);
+        if (NO_ERROR != player->setDataSource(source)) {
+            player.clear();
         }
+        err = attachNewPlayer(player);
     }
     return err;
 }