rec: started(timeshift) with incorrect segment id [1/1]

PD#SWPL-100710

Problem:
incorrect segment id

Solution:
Wait for the file status to stabilize,
before generate the new segment id

Verify:
PB

Change-Id: I2fe842ea68ce259161a8c433022aadc4c9ebc5b9
Signed-off-by: Zhiqiang Han <zhiqiang.han@amlogic.com>
diff --git a/src/dvr_wrapper.c b/src/dvr_wrapper.c
index 9ffe28d..cebac7f 100644
--- a/src/dvr_wrapper.c
+++ b/src/dvr_wrapper.c
@@ -1105,26 +1105,6 @@
   ctx->record.event_fn = params->event_fn;
   ctx->record.event_userdata = params->event_userdata;
 
-  uint64_t new_segment_id = 0;
-
-  {
-    uint32_t segment_nb = 0;
-    uint64_t *p_segment_ids = NULL;
-    error = dvr_segment_get_list(params->location, &segment_nb, &p_segment_ids);
-    if (error == DVR_SUCCESS && segment_nb>0) {
-      // Tainted data issue originating from fgets seem false positive, so we
-      // just suppress it here.
-      // coverity[tainted_data]
-      new_segment_id = p_segment_ids[segment_nb-1]+1;
-    }
-    if (p_segment_ids != NULL) {
-      free(p_segment_ids);
-    }
-    DVR_WRAPPER_DEBUG("new_segment_id:%lld\n", new_segment_id);
-  }
-
-  ctx->record.next_segment_id = new_segment_id;
-  ctx->current_segment_id = new_segment_id;
   INIT_LIST_HEAD(&ctx->segments);
   ctx->sn = get_sn();
 
@@ -1239,14 +1219,37 @@
     return DVR_FAILURE;
   }
   strncpy(start_param->location, ctx->record.param_open.location, len+1);
-  start_param->segment.segment_id = ctx->record.next_segment_id++;
   start_param->segment.nb_pids = params->pids_info.nb_pids;
   for (i = 0; i < params->pids_info.nb_pids; i++) {
     start_param->segment.pids[i] = params->pids_info.pids[i];
     start_param->segment.pid_action[i] = DVR_RECORD_PID_CREATE;
   }
+
   if (params->save_rec_file == 0)//default is not save
     dvr_segment_del_by_location(start_param->location);
+
+  //wait for the file status to stabilize before set the new segment id
+  uint64_t new_segment_id = 0;
+  {
+    uint32_t segment_nb = 0;
+    uint64_t *p_segment_ids = NULL;
+    error = dvr_segment_get_list(ctx->record.param_open.location, &segment_nb, &p_segment_ids);
+    if (error == DVR_SUCCESS && segment_nb>0) {
+      // Tainted data issue originating from fgets seem false positive, so we
+      // just suppress it here.
+      // coverity[tainted_data]
+      new_segment_id = p_segment_ids[segment_nb-1]+1;
+    }
+    if (p_segment_ids != NULL) {
+      free(p_segment_ids);
+    }
+    DVR_WRAPPER_DEBUG("new_segment_id:%lld\n", new_segment_id);
+  }
+  ctx->record.next_segment_id = new_segment_id;
+  ctx->current_segment_id = new_segment_id;
+
+  start_param->segment.segment_id = ctx->record.next_segment_id++;
+
   {
     /*sync to update for further use*/
     DVR_RecordStartParams_t *update_param;