| delorie.com/archives/browse.cgi | search |
| 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:message-id:from:content-type:subject:date:to | |
| :mime-version; q=dns; s=default; b=JuKX/yrLgnj4Xg4y/t1wqly+wK3Dq | |
| OD6N4l2F3KTiYTc1TACHoXDGfKj2M79zaaPriSSkhQsRMxNhvTI7AA5uNFuPX59v | |
| zC6iVbXc/FZcPKu2Vhh27jueKz3oUdLw0HRMKDZsLpGv4uPXAUDXm4OA82yYQ3Z7 | |
| u5QmHQljeHLMnA= | |
| 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:message-id:from:content-type:subject:date:to | |
| :mime-version; s=default; bh=5vmAAqHn6qU2rr8fky4UyS/KteI=; b=DVj | |
| 5w0f5R0vptso5MqGa/zImVMr+MIaqf06AqioBtGSsO5QxUcAxqX7tfnximEvph1G | |
| RiJMctjezrDGH9m5mWUozw4fy1ySBnGxiwh0dcux5CE06JEKnbWt7vYfOM0ewAIr | |
| 0xS7QvqBcxKmynpQqlU6595hPp30uK9ZI+Dz3xso= | |
| 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.3 required=5.0 tests=BAYES_50,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 |
| X-HELO: | blu0-omc1-s3.blu0.hotmail.com |
| X-TMN: | [vsBvQn3RRRieL0+pMredY1gVy8+gI3Wo] |
| Message-ID: | <BLU0-SMTP2548379AB60C7318BF1AD73D1CA0@phx.gbl> |
| From: | Mihail Stefanov <mihaillive AT hotmail DOT com> |
| Subject: | After call to SwitchToFiber, malloc hangs |
| Date: | Fri, 3 Jan 2014 12:59:53 +0200 |
| To: | cygwin AT cygwin DOT com |
| MIME-Version: | 1.0 (Mac OS X Mail 7.1 \(1827\)) |
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="us-ascii"
Hi,
I have problem with malloc hanging when I SwitchToFiber. I have current env=
ironment:
=20
CYGWIN_NT-6.1 win7-dev 1.7.27(0.271/5/3) 2013-12-09 11:54 x86_64 Cygwin (Wi=
ndows 7, x64)
I am trying to use Windows Fibers API in cygwin environment. All is working=
fine, till the moment I call SwitchToFiber and then malloc. The processor =
CPU usage goes to 50% and after some time to 100%. In most cases this a res=
ult of memory corruption. In case I do not call malloc, all is working fin=
e. Is this something to do with the stack?
I made small test project attached to the email.
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34
Content-Disposition: attachment; filename="fiber.c"
Content-Type: application/octet-stream; name="fiber.c"
Content-Transfer-Encoding: quoted-printable
#include <assert.h>=0D=0A=
#include "fiber.h"=0D=0A=
=0D=0A=
#define STACK_SIZE (1024*1024)=0D=0A=
=0D=0A=
void=0D=0A=
init_fiber(fiber_t *fiber)=0D=0A=
{=0D=0A=
=0D=0A=
assert(fiber);=0D=0A=
=0D=0A=
DWORD ret =3D 0;=0D=0A=
void *p_fiber =3D 0;=0D=0A=
=0D=0A=
p_fiber =3D GetCurrentFiber();=0D=0A=
if (p_fiber !=3D NULL && p_fiber !=3D (void*)0x1E00) {=0D=0A=
fiber->f_pointer =3D p_fiber;=0D=0A=
fiber->init =3D 1;=0D=0A=
return;=0D=0A=
}=0D=0A=
=0D=0A=
p_fiber =3D ConvertThreadToFiber(NULL);=0D=0A=
if(p_fiber) {=0D=0A=
fiber->f_pointer =3D p_fiber;=0D=0A=
fiber->init =3D 1;=0D=0A=
} else {=0D=0A=
ret =3D GetLastError();=0D=0A=
}=0D=0A=
}=0D=0A=
=0D=0A=
=0D=0A=
void=0D=0A=
prepare_fiber(size_t stack_size, fiber_t *fiber, void *code, void* arg)=0D=
=0A=
{=0D=0A=
assert(fiber);=0D=0A=
assert(code);=0D=0A=
fiber->f_pointer =3D CreateFiber(stack_size, (LPFIBER_START_ROUTINE)cod=
e, (LPVOID)arg);=0D=0A=
assert(fiber->f_pointer);=0D=0A=
}=0D=0A=
=0D=0A=
void=0D=0A=
release_fiber(fiber_t *fiber)=0D=0A=
{=0D=0A=
if (fiber->f_pointer) {=0D=0A=
DeleteFiber(fiber->f_pointer);=0D=0A=
}=0D=0A=
fiber->f_pointer =3D NULL;=0D=0A=
}=0D=0A=
=0D=0A=
void=0D=0A=
switch_fiber(fiber_t *to, fiber_t *from)=0D=0A=
{=0D=0A=
assert(from->f_pointer);=0D=0A=
BOOL isFiber =3D IsThreadAFiber();=0D=0A=
if (!isFiber)=0D=0A=
ConvertThreadToFiber(0);=0D=0A=
=0D=0A=
to->f_pointer =3D GetCurrentFiber();=0D=0A=
SwitchToFiber(from->f_pointer);=0D=0A=
=0D=0A=
if(!isFiber)=0D=0A=
ConvertFiberToThread();=0D=0A=
}=0D=0A=
=0D=0A=
void fiber_code(void* arg)=0D=0A=
{=0D=0A=
void *p =3D malloc(1);=0D=0A=
}=0D=0A=
=0D=0A=
int main(void)=0D=0A=
{=0D=0A=
fiber_t from;=0D=0A=
fiber_t to;=0D=0A=
init_fiber(&from);=0D=0A=
prepare_fiber(0, &from, fiber_code, 0);=0D=0A=
switch_fiber(&to, &from);=0D=0A=
=0D=0A=
}=0D=0A=
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34
Content-Disposition: attachment; filename="fiber.h"
Content-Type: application/octet-stream; name="fiber.h"
Content-Transfer-Encoding: quoted-printable
#ifndef __FIBER_H__=0D=0A=
#define __FIBER_H__=0D=0A=
=0D=0A=
#include <windows.h>=0D=0A=
=0D=0A=
typedef struct _fiber=0D=0A=
{=0D=0A=
void *f_pointer;=0D=0A=
int init;=0D=0A=
} fiber_t;=0D=0A=
=0D=0A=
void init_fiber(fiber_t *fiber);=0D=0A=
=0D=0A=
void switch_fiber(fiber_t *to_fiber, fiber_t *from_fiber);=0D=0A=
=0D=0A=
void prepare_fiber(size_t stack_size, fiber_t *fiber, void *code, void* arg=
);=0D=0A=
=0D=0A=
void release_fiber(fiber_t *fiber);=0D=0A=
=0D=0A=
#endif=0D=0A=
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"
Regards
Mihail
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34
Content-Type: text/plain; charset=us-ascii
--
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
--Apple-Mail=_9976AB64-04A9-4800-8A40-CFA0632D3C34--
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |