Automated import from //branches/master/...@141201,141201
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index ff64855..7164b78 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -335,6 +335,7 @@
     uint32_t                mNotificationFrames;
     uint32_t                mRemainingFrames;
     uint32_t                mMarkerPosition;
+    bool                    mMarkerReached;
     uint32_t                mNewPosition;
     uint32_t                mUpdatePeriod;
 };
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp
index 7594ff0..5c800c3 100644
--- a/media/libmedia/AudioRecord.cpp
+++ b/media/libmedia/AudioRecord.cpp
@@ -200,6 +200,7 @@
     // TODO: add audio hardware input latency here
     mLatency = (1000*mFrameCount) / mSampleRate;
     mMarkerPosition = 0;
+    mMarkerReached = false;
     mNewPosition = 0;
     mUpdatePeriod = 0;
 
@@ -293,6 +294,9 @@
 
     if (android_atomic_and(~1, &mActive) == 1) {
         mAudioRecord->stop();
+        // the record head position will reset to 0, so if a marker is set, we need
+        // to activate it again
+        mMarkerReached = false;
         if (t != 0) {
             t->requestExit();
         } else {
@@ -317,6 +321,7 @@
     if (mCbf == 0) return INVALID_OPERATION;
 
     mMarkerPosition = marker;
+    mMarkerReached = false;
 
     return NO_ERROR;
 }
@@ -492,10 +497,10 @@
     size_t readSize;
 
     // Manage marker callback
-    if (mMarkerPosition > 0) {
+    if (!mMarkerReached && (mMarkerPosition > 0)) {
         if (mCblk->user >= mMarkerPosition) {
             mCbf(EVENT_MARKER, mUserData, (void *)&mMarkerPosition);
-            mMarkerPosition = 0;
+            mMarkerReached = true;
         }
     }