This is the mail archive of the mailing list for the libstdc++ 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]

signal and STL constructors conflict causing deadlock, or - __USE_MALLOC and RedHat 8.0

> Hi!
> 	I'm trying to create a timer, using signal (SIGALARM). In that timer
a string is allocated. At the same time the main flow is also allocating
strings. (This, of course, is a small example of a much more complex issue).
When I compile my file with g++ sigmalloc.cpp -lpthread, I get a deadlock
caused by the fact that the main flow was interrupted by the signal while in
the string constructor.
> 	Some research has shown that I should use -D__USE_MALLOC in
compilation. This does, indeed, solve the deadlock. However, as I tried to
compile my code on RedHat 8 I received the following error: 
> 	"In file included from /usr/include/c++/3.2/iostream:44,
>                  from /usr/include/c++/3.2/backward/iostream.h:32,
>                  from sigmalloc.cpp:7:
> /usr/include/c++/3.2/i386-redhat-linux/bits/c++config.h:74:2: #error
__USE_MALLOC should only be defined within
libstdc++-v3/include/bits/c++config before full recompilation of the
> 	I would appreciate any advice!
> 	Thanks a lot!
> My code:
> #include <pthread.h>
> #include <unistd.h>
> #include <signal.h>
> #include <iostream.h>
> #include <string>
> using namespace std;
> void sig(int q)
> {
>     string s = "SIG!";
>     cout << s << endl;
>     alarm(1);
> }
> int main() {
>     signal(SIGALRM, sig);
>     alarm(1);
>     while (1) {
>         string s = "QUEUEUE";
>     }
>     return 0;
> }

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