From c71d6b39724b11114a73559bc10d58bdbdacc0a1 Mon Sep 17 00:00:00 2001 From: "giwoong.kim" Date: Fri, 26 Apr 2013 11:49:43 +0900 Subject: [PATCH] shm: Change the segment size if shmget fails Change the segment size if shmget fails. Change-Id: Ibdd8e95b29eac13a7180da06d367072e0fc775e2 Signed-off-by: GiWoong Kim --- tizen/src/skin/client/native_src/share.c | 28 +++++++++++++++++++++- .../src/org/tizen/emulator/skin/EmulatorSkin.java | 7 +++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/tizen/src/skin/client/native_src/share.c b/tizen/src/skin/client/native_src/share.c index a8bef4e..4063908 100644 --- a/tizen/src/skin/client/native_src/share.c +++ b/tizen/src/skin/client/native_src/share.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "org_tizen_emulator_skin_EmulatorShmSkin.h" #define MAXLEN 512 @@ -52,7 +53,32 @@ JNIEXPORT jint JNICALL Java_org_tizen_emulator_skin_EmulatorShmSkin_shmget if (shmid == -1) { fprintf(stderr, "share.c: shmget failed\n"); fflush(stderr); - return 1; + + if (errno == EINVAL) { + /* get identifiedr of unavailable segment */ + shmid = shmget((key_t)shmkey, (size_t)1, 0666 | IPC_CREAT); + if (shmid == -1) { + perror("share.c: "); + return 1; + } + + /* a segment with given key existed, but size is greater than + the size of that segment */ + if (shmctl(shmid, IPC_RMID, 0) == -1) { + perror("share.c: "); + return 1; + } + + /* try to shmget one more time */ + shmid = shmget((key_t)shmkey, (size_t)size, 0666 | IPC_CREAT); + if (shmid == -1) { + perror("share.c: "); + return 1; + } else { + fprintf(stdout, "share.c: new segment was to be created!\n"); + fflush(stdout); + } + } } /* We now make the shared memory accessible to the program */ diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index 0490227..cf8822d 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -1705,7 +1705,12 @@ public class EmulatorSkin { communicator.terminate(); } - System.exit(-1); + shell.getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + System.exit(-1); + } + }); } } }); -- 2.7.4