[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

C++ & threads crashes



I posted this a couple of days ago but not sure what happened to the original
or any replies due to mail problems & master etc.

I have a demo program which I have included below which should do
some threads, in a C++ program. It works fine on Solaris 5.6,
it works fine on bo with libc5, but on both my libc6 systems
it segfaults, and gdb says that's in pthread_mutex_lock which
sounds weird to me. Any ideas?


thanks,
hamish


#include <iostream.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

const bool FALSE = 0;
const bool TRUE = 1;

class Server {
private:
    pthread_t threadid;
    bool active;

public:
    Server();
    ~Server() {
      if (active == TRUE) {
        cout << "we are screwed" << endl;
        cout.flush();
      }
      cout << "destroying " << threadid << endl;
      cout.flush();
    }
    static void *Server_main(void *);
};

Server::Server()
{
    active = FALSE;
    int retVal = pthread_create(&threadid, NULL, Server::Server_main, this);
    if (retVal == -1) {
      perror("Server");
    }
    cout << "retVal = " << retVal << " threadid " << threadid << endl;
}

void *Server::Server_main(void *param)
{
    Server *server = (Server *) param;

    server->active = TRUE;
    cout << "Server created threadid " << server->threadid << endl;
    cout << "exiting thread " << endl;
    cout.flush();
    sleep(2);
    server->active = FALSE;
    return 0;  // to shut up the compiler about returning values
}

int main()
{
    cout << "About to start a server" << endl;
    Server newserver;

    sleep(1);
    cout << "exiting main" << endl;
    return(0);
}


-- 
Hamish Moffatt       Mobile: +61 412 011 176       hamish@rising.com.au

Rising Software Australia Pty. Ltd. 
Developers of music education software including Auralia & Musition.
31 Elmhurst Road, Blackburn, Victoria Australia, 3130
Phone: +61 3 9894 4788  Fax: +61 3 9894 3362  USA Toll Free: 1-888-667-7839
Internet: http://www.rising.com.au/


--
E-mail the word "unsubscribe" to debian-user-request@lists.debian.org
TO UNSUBSCRIBE FROM THIS MAILING LIST. Trouble? E-mail to listmaster@lists.debian.org


Reply to: