diff options
author | Rene Ladan <rene@FreeBSD.org> | 2013-01-23 19:34:09 +0800 |
---|---|---|
committer | Rene Ladan <rene@FreeBSD.org> | 2013-01-23 19:34:09 +0800 |
commit | c582d7fd4c6169b302a143e8cf96969195ab14cd (patch) | |
tree | f9b058d5c6a0b9bdf85d21edc208cfe13a046c93 /www/chromium | |
parent | 3d7591748ba2e3b18a186dc8f2703d4178505b96 (diff) | |
download | freebsd-ports-gnome-c582d7fd4c6169b302a143e8cf96969195ab14cd.tar.gz freebsd-ports-gnome-c582d7fd4c6169b302a143e8cf96969195ab14cd.tar.zst freebsd-ports-gnome-c582d7fd4c6169b302a143e8cf96969195ab14cd.zip |
Remove shared memory keys only if no segments are attached.
This fixes a bug when kern.ipc.shm_allow_removed was set to 0.
Submitted by: George Liaskos
Diffstat (limited to 'www/chromium')
-rw-r--r-- | www/chromium/files/patch-ui__surface__transport_dib_linux.cc | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/www/chromium/files/patch-ui__surface__transport_dib_linux.cc b/www/chromium/files/patch-ui__surface__transport_dib_linux.cc index f21230f672c1..0bf21dd862d6 100644 --- a/www/chromium/files/patch-ui__surface__transport_dib_linux.cc +++ b/www/chromium/files/patch-ui__surface__transport_dib_linux.cc @@ -1,18 +1,21 @@ ---- ui/surface/transport_dib_linux.cc.orig 2011-09-14 11:02:00.000000000 +0300 -+++ ui/surface/transport_dib_linux.cc 2011-09-21 13:59:55.000000000 +0300 -@@ -31,6 +31,11 @@ - address_ = kInvalidAddress; +--- ui/surface/transport_dib_linux.cc.orig 2013-01-08 04:46:06.000000000 +0200 ++++ ui/surface/transport_dib_linux.cc 2013-01-17 23:27:10.221168481 +0200 +@@ -37,6 +37,14 @@ + DCHECK(display_); + ui::DetachSharedMemory(display_, x_shm_); } - ++ +#if defined(OS_FREEBSD) -+ if(is_valid_id(key_)) -+ shmctl(key_.shmkey, IPC_RMID, 0); ++ if (is_valid_id(key_)) { ++ struct shmid_ds shmst; ++ if (shmctl(key_.shmkey, IPC_STAT, &shmst) == 0 && shmst.shm_nattch == 0) ++ shmctl(key_.shmkey, IPC_RMID, 0); ++ } +#endif -+ - if (x_shm_) { - DCHECK(display_); - ui::DetachSharedMemory(display_, x_shm_); -@@ -50,10 +55,13 @@ + } + + // static +@@ -51,10 +59,13 @@ } void* address = shmat(shmkey, NULL /* desired address */, 0 /* flags */); |