display: fix shared memory problems
authormunkyu.im <munkyu.im@samsung.com>
Thu, 11 Oct 2012 06:45:19 +0000 (15:45 +0900)
committermunkyu.im <munkyu.im@samsung.com>
Thu, 11 Oct 2012 06:45:19 +0000 (15:45 +0900)
divided into many shared memory keys (originally only one)
So, many emulator instances can be launached at the same time.

Signed-off-by: Munkyu Im <munkyu.im@samsung.com>
tizen/src/emulator.c
tizen/src/emulator.h
tizen/src/hw/maru_vga.c
tizen/src/skin/client/native_src/Share.c

index 5312456251eb75f9090cee51d37d74992274ddf8..c00ffcfcdf71caa401d77b6762669d1618386212 100644 (file)
 #include <sys/shm.h>
 #endif
 
+#if defined(CONFIG_DARWIN)
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#endif
+
 #include "mloop_event.h"
 
 MULTI_DEBUG_CHANNEL(qemu, main);
@@ -75,7 +81,6 @@ MULTI_DEBUG_CHANNEL(qemu, main);
 #define LOGFILE             "emulator.log"
 #define LCD_WIDTH_PREFIX "width="
 #define LCD_HEIGHT_PREFIX "height="
-
 #define MIDBUF  128
 
 int tizen_base_port;
@@ -233,6 +238,22 @@ void make_shdmem(void)
     free(shared_memory);
 #elif defined(CONFIG_DARWIN)
     /* TODO: */
+    int shmid;
+    char *shared_memory;
+    
+    shmid = shmget((key_t)SHMKEY, MAXLEN, 0666|IPC_CREAT);
+    if (shmid == -1) {
+        ERR("shmget failed\n");
+        return;
+    }
+    shared_memory = shmat(shmid, (char *)0x00, 0);
+    if (shared_memory == (void *)-1) {
+        ERR("shmat failed\n");
+        return;
+    }
+    sprintf(shared_memory, "%d", get_sdb_base_port() + 2);
+    INFO("shared memory key: %d, value: %s\n", SHMKEY, (char *)shared_memory);
+    shmdt(shared_memory);
 #endif
     return;
 }
index 4d1dc492f766766b1490f6e7bbaa959dad20453e..db43e30fd3d895a3783fc856c482e6b26ed6f917 100644 (file)
@@ -39,7 +39,7 @@
 
 #define MAXLEN  512
 #define MAXPACKETLEN 60
-
+#define SHMKEY 26099
 extern char tizen_target_path[MAXLEN];
 
 void exit_emulator(void);
index 555be0ee22e10684b5ce886fbcffa9208b0ab5c2..942dfce7e1285b50b651dca8cd54f346076d4d13 100644 (file)
 #include "debug_ch.h"
 
 #ifdef USE_SHM
+#include "emulator.h"
+#include <sys/types.h>
+#include <sys/ipc.h>
 #include <sys/shm.h>
 #endif
 
+#ifdef USE_SHM
+void *shared_memory = (void*)0;
+#endif
+
 MULTI_DEBUG_CHANNEL(qemu, maru_vga);
 
 
@@ -89,13 +96,6 @@ MULTI_DEBUG_CHANNEL(qemu, maru_vga);
 
 #define MARU_VGA
 
-#ifdef USE_SHM
-/* shared memory */
-void *shared_memory = (void*)0;
-int shmid;
-#endif
-
-
 static const uint32_t mask16[16] = {
     PAT(0x00000000),
     PAT(0x000000ff),
@@ -1545,19 +1545,41 @@ void maru_vga_common_init(VGACommonState *s, int vga_ram_size)
     vga_dirty_log_start(s);
 
 #ifdef USE_SHM
-    int mykey = getuid();
+    int mykey;
+    void *temp; 
+    int shmid;
+
+    shmid = shmget((key_t)SHMKEY, (size_t)MAXLEN, 0666 | IPC_CREAT);
+    if (shmid == -1) {
+        ERR( "shmget failed\n");
+        perror("maru_vga: ");
+        exit(1);
+    }
+    
+    temp = shmat(shmid, (char*)0x0, 0);
+    if (temp == (void *)-1) {
+        ERR( "shmat failed\n");
+        perror("maru_vga: ");
+        exit(1);
+    }
+    mykey = atoi(temp);
+    shmdt(temp);
+    INFO("shared memory key: %d, ram_size : %d\n", mykey, vga_ram_size);
     shmid = shmget((key_t)mykey, (size_t)vga_ram_size, 0666 | IPC_CREAT);
     if (shmid == -1) {
-        fprintf(stderr, "shmget failed\n");
+       ERR( "shmget failed\n");
+        perror("maru_vga: ");
         exit(1);
     }
-
+    
     shared_memory = shmat(shmid, (void*)0, 0);
     if (shared_memory == (void *)-1) {
-        fprintf(stderr, "shmat failed\n");
+        ERR( "shmat failed\n");
+        perror("maru_vga: ");
         exit(1);
     }
 
+    memset(shared_memory, 0x00, (size_t)vga_ram_size); 
     printf("Memory attached at %X\n", (int)shared_memory);
 #endif
 
index ac1d15e003186818a35dc226a790d5ff9d860ef4..1e05050b390b0dc9d7c5aabdb1a1acb3b4a08ce6 100644 (file)
@@ -7,6 +7,8 @@
 #include <sys/shm.h>
 #include "org_tizen_emulator_skin_EmulatorShmSkin.h"
 
+#define MAXLEN 512
+#define SHMKEY 26099
 
 void *shared_memory = (void *)0;
 int shmid;
@@ -15,9 +17,23 @@ int shmid;
 JNIEXPORT jint JNICALL Java_org_tizen_emulator_skin_EmulatorShmSkin_shmget
   (JNIEnv *env, jobject obj, jint vga_ram_size)
 {
-    int mykey = getuid();
+    void *temp;
+    int keyval;
+    shmid = shmget((key_t)SHMKEY, (size_t)MAXLEN, 0666 | IPC_CREAT);
+    if (shmid == -1) {
+       fprintf(stderr, "Share.c: shmget failed\n");
+        exit(1);
+    }
+    
+    temp = shmat(shmid, (char*)0x0, 0);
+    if (temp == (void *)-1) {
+        fprintf(stderr, "Share.c: shmat failed\n");
+        exit(1);
+    }
+    keyval = atoi(temp);
+    shmdt(temp);
 
-    shmid = shmget((key_t)mykey, (size_t)vga_ram_size, 0666 | IPC_CREAT);
+    shmid = shmget((key_t)keyval, (size_t)vga_ram_size, 0666 | IPC_CREAT);
     if (shmid == -1) {
         return 1;
     }