Change to retry when user creation/deletion is failed 34/146534/1 accepted/tizen/unified/20170901.030107 submit/tizen/20170831.072417 submit/tizen_4.0/20170831.090142 submit/tizen_4.0/20170901.010402
authorSungbae Yoo <sungbae.yoo@samsung.com>
Tue, 29 Aug 2017 08:31:58 +0000 (17:31 +0900)
committerSungbae Yoo <sungbae.yoo@samsung.com>
Tue, 29 Aug 2017 08:31:58 +0000 (17:31 +0900)
Change-Id: Id609e80c55e28124a2bee2ade190ff2ef950e7e2
Signed-off-by: Sungbae Yoo <sungbae.yoo@samsung.com>
server/manager.cpp

index 90836b4..6db7446 100644 (file)
@@ -42,6 +42,7 @@
 
 #include "rmi/manager.h"
 
+#define GUMD_RETRY_COUNT 5
 #define CGROUP_SUBSYSTEM "krate"
 #define PRIVILEGE_INTERNAL_PLATFORM "http://tizen.org/privilege/internal/default/platform"
 #define KRATE_DELEGATOR_APP  "org.tizen.keyguard"
@@ -534,14 +535,17 @@ int Manager::createKrate(const std::string& name, const std::string& manifest)
 
                try {
                        //create krate user by gumd
-                       GumUser* guser = NULL;
-                       while (guser == NULL) {
-                               guser = gum_user_create_sync(FALSE);
+                       gboolean ret = false;
+                       for (int i = 0; i < GUMD_RETRY_COUNT && !ret; i++) {
+                               GumUser* guser = NULL;
+                               for (int i = 0; i < GUMD_RETRY_COUNT && guser == NULL; i++) {
+                                       guser = gum_user_create_sync(FALSE);
+                               }
+                               g_object_set(G_OBJECT(guser), "username", name.c_str(),
+                                                                       "usertype", GUM_USERTYPE_SECURITY, NULL);
+                               ret = gum_user_add_sync(guser);
+                               g_object_unref(guser);
                        }
-                       g_object_set(G_OBJECT(guser), "username", name.c_str(),
-                                                       "usertype", GUM_USERTYPE_SECURITY, NULL);
-                       gboolean ret = gum_user_add_sync(guser);
-                       g_object_unref(guser);
 
                        if (!ret) {
                                throw runtime::Exception("Failed to remove user (" + name + ") by gumd");
@@ -634,12 +638,15 @@ int Manager::removeKrate(const std::string& name)
                        ::tzplatform_reset_user();
 
                        //remove krate user
-                       GumUser* guser = NULL;
-                       while (guser == NULL) {
-                               guser = gum_user_get_sync(user.getUid(), FALSE);
+                       gboolean ret = false;
+                       for (int i = 0; i < GUMD_RETRY_COUNT && !ret; i++) {
+                               GumUser* guser = NULL;
+                               for (int i = 0; i < GUMD_RETRY_COUNT && guser == NULL; i++) {
+                                       guser = gum_user_get_sync(user.getUid(), FALSE);
+                               }
+                               ret = gum_user_delete_sync(guser, TRUE);
+                               g_object_unref(guser);
                        }
-                       gboolean ret = gum_user_delete_sync(guser, TRUE);
-                       g_object_unref(guser);
 
                        if (!ret) {
                                throw runtime::Exception("Failed to remove user " + name + "(" + std::to_string(user.getUid()) + ") by gumd");