This is the mail archive of the cygwin-apps mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [64bit] Problem with emacs and shared memory under X11


On 18/07/2013 22:34, Corinna Vinschen wrote:
> On Jul 18 22:06, Jon TURNEY wrote:
>> On 18/07/2013 09:37, Corinna Vinschen wrote:
>>> On Jul 17 22:31, Jon TURNEY wrote:
>>>> After going around in circles on this a few times, this is what I now think I
>>>> know:
>>>>
>>>> The proximate cause of this error is that the x86_64 libcairo2 package appears
>>>> to be built with IPC_RMID_DEFERRED_RELEASE defined, which should only happen
>>>> on systems which allow processes to shmat() to a shared memory segment which
>>>> has already been marked for deletion with shmctl(IPC_RMID) (A non-portable
>>>> Linux behaviour)
>>>>
>>>> (This behaviour can be turned on in cygwin by setting the
>>>> 'kern.ipc.shm_allow_removed' to 'yes' in /etc/cygserver.conf, so that is also
>>>> a work around)
>>>>
>>>> Attached is the configure test extracted from cairo, which for some reason
>>>> functions incorrectly on x86_64.
>>>
>>> I'm glad to read it's not a bug in Cygwin or Cygserver :}
>>
>> I'm a bit confused to read that you don't consider this shmtest.c behaving
>> incorrectly on x86_64 a bug in Cygwin.
> 
> I totally misunderstood your mail apparently.  Your mail implied to me
> that this is a build error in libcairo2, not in Cygwin, so I thought
> Cygwin is off the hook.

Sorry, I should have explained more clearly that a SHM bug in cygwin could
cause an incorrect result for a configure test in cairo, which causes cairo to
be built wrongly, which causes applications which use it to fail with SHM errors.

> Thanks for tracking this down and the patch.  I'm just wondering.  This
> is one of those subtil bugs introduced by the size difference between
> int and pointers.  Maybe we should better provide a constructor which
> takes an ssize_t as input, rather than an int.  Does the below fix the
> problem as well?

Oh yes, that works, and is a bit clearer.

> Index: cygserver_ipc.h
> ===================================================================
> RCS file: /cvs/src/src/winsup/cygwin/cygserver_ipc.h,v
> retrieving revision 1.13
> diff -u -p -r1.13 cygserver_ipc.h
> --- cygserver_ipc.h	23 Apr 2013 09:44:31 -0000	1.13
> +++ cygserver_ipc.h	18 Jul 2013 21:33:58 -0000
> @@ -59,7 +59,7 @@ private:
>    };
>  
>  public:
> -  ipc_retval (int ni) { i = ni; }
> +  ipc_retval (ssize_t nssz) { ssz = nssz; }
>  
>    operator int () const { return i; }
>    int operator = (int ni) { return i = ni; }





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]