public inbox for guile-gtk@sourceware.org
 help / color / mirror / Atom feed
* bug in threading implementation, using guile-1.6.1
@ 2002-12-31  4:21 Stan Pinte
  2002-12-31  4:59 ` Stan Pinte
  0 siblings, 1 reply; 2+ messages in thread
From: Stan Pinte @ 2002-12-31  4:21 UTC (permalink / raw)
  To: guile-user; +Cc: guile-gtk

hello,

I am using multiple threads within a guile-gtk application.

a call to (gtk-threads-ensure-handler) ensures that a first thread gets started, and
allows the rest of my program to execute. At the end of that program, I call (gtk-main), to 
wait in the Gtk event thread.

If I run my program without starting a second thread, it is ok, but as soon as I invoke 
(gtk-threads-ensure-handler), my CPU is used at 100%

NOTES:

1: I configured guile-1.6.1 using the "--with-threads" flag.
2: if I strace my process, I see this:

ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 454970}, NULL) = 0
gettimeofday({1041338430, 455055}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 455767}, NULL) = 0
gettimeofday({1041338430, 455852}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 456429}, NULL) = 0
gettimeofday({1041338430, 456511}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 457084}, NULL) = 0
gettimeofday({1041338430, 457166}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 459008}, NULL) = 0
gettimeofday({1041338430, 459097}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})
gettimeofday({1041338430, 459688}, NULL) = 0
gettimeofday({1041338430, 459771}, NULL) = 0
ioctl(7, FIONREAD, [0])                 = 0
select(32, [6 7], [], [], {0, 0})       = 1 (in [6], left {0, 0})

and so on....

--> I suspect a bug in the implementation of 

coop_wait_for_runnable_thread () in libguile/isselect.c

if (QFIRST (coop_global_sleepq)->timeoutp)
    gettimeofday (&now, NULL);
  
  return coop_wait_for_runnable_thread_now (&now);

...

thanks a lot,

Stan

-- 

Stanislas Pinte

Computer Consultant

Alto Software
20 Pl St Jacques
B-4000 Liège

web:		http://www.altosw.be
email:		alto_stan@wanadoo.be

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: bug in threading implementation, using guile-1.6.1
  2002-12-31  4:21 bug in threading implementation, using guile-1.6.1 Stan Pinte
@ 2002-12-31  4:59 ` Stan Pinte
  0 siblings, 0 replies; 2+ messages in thread
From: Stan Pinte @ 2002-12-31  4:59 UTC (permalink / raw)
  To: guile-user; +Cc: guile-gtk

100% cpu is also the case with the

"--with-threads=coop" flag.

Stan

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-12-31 12:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-31  4:21 bug in threading implementation, using guile-1.6.1 Stan Pinte
2002-12-31  4:59 ` Stan Pinte

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).