From: munkyu.im Date: Thu, 11 Oct 2012 06:45:19 +0000 (+0900) Subject: display: fix shared memory problems X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~1417 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=74bfcf26924acf9914b16f813770926e797207e9;p=sdk%2Femulator%2Fqemu.git display: fix shared memory problems 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 --- diff --git a/tizen/src/emulator.c b/tizen/src/emulator.c index 5312456251..c00ffcfcdf 100644 --- a/tizen/src/emulator.c +++ b/tizen/src/emulator.c @@ -62,6 +62,12 @@ #include #endif +#if defined(CONFIG_DARWIN) +#include +#include +#include +#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; } diff --git a/tizen/src/emulator.h b/tizen/src/emulator.h index 4d1dc492f7..db43e30fd3 100644 --- a/tizen/src/emulator.h +++ b/tizen/src/emulator.h @@ -39,7 +39,7 @@ #define MAXLEN 512 #define MAXPACKETLEN 60 - +#define SHMKEY 26099 extern char tizen_target_path[MAXLEN]; void exit_emulator(void); diff --git a/tizen/src/hw/maru_vga.c b/tizen/src/hw/maru_vga.c index 555be0ee22..942dfce7e1 100644 --- a/tizen/src/hw/maru_vga.c +++ b/tizen/src/hw/maru_vga.c @@ -50,9 +50,16 @@ #include "debug_ch.h" #ifdef USE_SHM +#include "emulator.h" +#include +#include #include #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 diff --git a/tizen/src/skin/client/native_src/Share.c b/tizen/src/skin/client/native_src/Share.c index ac1d15e003..1e05050b39 100644 --- a/tizen/src/skin/client/native_src/Share.c +++ b/tizen/src/skin/client/native_src/Share.c @@ -7,6 +7,8 @@ #include #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; }