Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Nov 2000 16:10:45 -0500
From:      James FitzGibbon <james@targetnet.com>
To:        hackers@freebsd.org
Subject:   Repeatable STL core with -pthread
Message-ID:  <20001109161045.D39548@targetnet.com>

next in thread | raw e-mail | index | archive | help
We're having a problem with threaded programs that use the STL.  Given the
following program:

--START--
#include <string>
#include <pthread.h>

typedef map<int, int> mymap_t;

#ifdef GLOBLOCK
pthread_mutex_t glob_mut;
#endif

void *run(void *) {

	while (1) {
		string f("");
#ifdef GLOBLOCK
		pthread_mutex_lock(&glob_mut);
#endif
		f += "adsasd";
		f += "adsasd";
		f += "adsasd";
#ifdef GLOBLOCK
		pthread_mutex_unlock(&glob_mut);
#endif
	}

}

int main () {

	#define FOO 50
	pthread_t thread[FOO];

	for(int x =0;x<FOO;x++) {
		pthread_create(&thread[x], NULL, run, NULL);
	}

	for(int x =0;x<FOO;x++) {
		pthread_join(thread[x], NULL);
	}	

	exit(0);
}
---END---

When compiled like so:

c++ -g -pthread -o stl_core.cc stl_core.cc

The program will core after about 10 seconds, every time.  When compiled
with -DGLOBLOCK, it runs without fail.  I have tried this using gcc 2.95.1,
2.95.2, egcs-20001002 and 20001106 without success.  I have also tried using
the linuxthreads port, and with Matt Dillon's lowmem patch (can't remember
the URL offhand) and with Daniel Eischen's libc_r patches against -stable.

Under RedHat Linux 7.0 (kernel 2.2.16) using gcc 2.96 (development version),
the program works fine.

It would appear that there is an issue with some low-level allocator in the
STL as shipped in 4.x.  Because everything in the STL is build around said
allocator, this fails for almost anything that uses STL (the original test
program I used allocated a map rather than a string).

I'd appreciate any ideas this brings forth in people.

Thanks.

-- 
j.

James FitzGibbon                                           james@targetnet.com
Targetnet.com Inc.                              Voice/Fax +1 416 306-0466/0452


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001109161045.D39548>