#include "mc_util.h"
#define REGULAR_USER 5000
+#define RETRY_CNT 9
+#define SLEEP_TIME 1000 * 1000
typedef struct {
const char *server_name;
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *err_msg = NULL;
+ int retry_count = 0;
mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
mc_retvm_if(!sql_str, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid sql_str");
mc_secure_debug("Update query [%s]", sql_str);
- ret = sqlite3_exec(handle, sql_str, NULL, NULL, &err_msg);
- if (SQLITE_OK != ret) {
- mc_error("failed to update db[%s]", sqlite3_errmsg(handle));
+ while (1) {
+ ret = sqlite3_exec(handle, sql_str, NULL, NULL, &err_msg);
+
+ if (ret == SQLITE_OK)
+ break;
+
+ mc_error("failed to update db[%d, %s]", ret, err_msg);
SQLITE3_SAFE_FREE(err_msg);
+
+ if (ret == SQLITE_LOCKED &&
+ retry_count++ < RETRY_CNT) {
+ mc_warning("Locked retry[%d]", retry_count);
+ usleep(SLEEP_TIME);
+ continue;
+ }
+
return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
}