delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2014/01/30/07:26:06

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:reply-to:from:to:references:in-reply-to
:subject:date:message-id:mime-version:content-type
:content-transfer-encoding; q=dns; s=default; b=BAb1WfHjDxspRhqt
MuW7fdNxdKdw85ZNQ80UDLdpzzDJCWn3SmXzr51gEFwD/vytp451poAI123r8U4W
eTM+sfwKVluh8Ig75PqyfDVg7D4I73GGuvF8TMxWkvw428kLKuAOnpbXzmfqyhly
G8ph/JARaihBQFTjvk8TZyKZFZE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:reply-to:from:to:references:in-reply-to
:subject:date:message-id:mime-version:content-type
:content-transfer-encoding; s=default; bh=M1A6XufWg5Ieg149yGbdTd
xpm8o=; b=vOKyq/8JdGdM0k2T6cZJrsfyrrKSlsx25EqLi0SDJ+EIQEaU7dOmC/
67cNy7+GuIirVwhkHoFFiNWJnooULGKasjJyZjHnn0Hyi3/1XPLngB1bjk8svOie
8qhxzsZjIIdnoLlq7g6336Is5eoKaEXFLc2M/pnUrMiV4lUAbsIJU=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2
X-HELO: m1plsmtpa01-04.prod.mesa1.secureserver.net
Reply-To: <sbardwell AT lbmsys DOT com>
From: "Steven Bardwell" <SBardwell AT lbmsys DOT com>
To: <cygwin AT cygwin DOT com>
References: <01a801cf1cfa$77957900$66c06b00$@lbmsys.com> <20140129181250 DOT GW2821 AT calimero DOT vinschen DOT de> <52E95786 DOT 8050606 AT gmail DOT com> <20140130095822 DOT GY2821 AT calimero DOT vinschen DOT de>
In-Reply-To: <20140130095822.GY2821@calimero.vinschen.de>
Subject: RE: second call to mmap() results in error
Date: Thu, 30 Jan 2014 07:25:37 -0500
Message-ID: <001801cf1db6$66c47c40$344d74c0$@lbmsys.com>
MIME-Version: 1.0
X-IsSubscribed: yes
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id s0UCQ2sU027876

> > On 29/01/2014 19:12, Corinna Vinschen wrote:
> > >On Jan 29 09:00, Steven Bardwell wrote:
> > >>My application needs several areas of shared memory, and I am getting
> an
> > >>error ("No such device") on the second call to mmap(). The first call
> works
> > >>fine.
> 
> Sorry guys, but it still works fine for me.  I tried your testcase on W7
> 32, W7 64 in 32 and 64 bit, and on Windows 8.1 64 in 32 and 64 bit.  I
> tried it with Cygwin 1.7.27 and with the latest snapshot.  I'm always
> getting the output "Shared memory initialized" and no error at all.
> 
> 
> Any chance one of you guys could debug this further, by stepping through
> the Cygwin mmap64 function, preferredly using the latest snapshot or,
> a self-built Cygwin DLL from?
> 
> 
> Corinna

I reinstalled Cygwin, rebooted and the error persisted. Running 'gdb' and
stepping through the program showed that the call to mmap() fails for /block1
also -- it is returning an invalid address. This simplification of the program
shows that error on my machine ('Bus error (core dumped)' ) occurs
when it tries to do the memcpy() to the mapped address.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/errno.h>
#include <fcntl.h>
#include <sys/mman.h>

int main()
{
  int shm_fd1;
  char *mmap1;
  shm_fd1 = shm_open("/block1", O_CREAT | O_RDWR, 0666);
  if (shm_fd1 == -1) {
    fprintf(stderr, "Couldn't get fd for block1 (%s)\n", strerror(errno));
    exit(1);
  }
  ftruncate(shm_fd1, 524304);
  mmap1 = mmap(NULL, 524304, PROT_WRITE | PROT_READ, MAP_SHARED, shm_fd1, 0);
  if (mmap1 == (char *)-1) {
    fprintf(stderr, "Couldn't map memory for /block1 (%s)\n", strerror(errno));
    exit(1);
  }
  memcpy(mmap1, "ABCDEF\0", 7);
  fprintf(stdout, mmap1);

  fprintf(stdout, "Shared memory initialized\n");
  exit(0);
}
Steve


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019