Re: posix threads error

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

 



From: "Lucas Prado Melo" <lucaspm@xxxxxxxxxxx>:
#define die(msg) do { perror(msg); exit(1); } while(0)

This could be a function.

struct pack{
   Stack stck;
   pthread_mutex_t mutex;
};

int main(int argc, char *argv[]){
   void *trashbin;
   pthread_t peer[2];
   struct pack pck;
   //initialize pck mutex
   if( pthread_mutex_init(&( pck.mutex), NULL) != 0 )
       die("pthread_mutex_init");

You forgot:

 pck.stck = NULL;  /* create empty stack */

   //and make it multi-threaded
   if( pthread_create(&peer[0], NULL, doPush, (void*)&pck) != 0 )
       die("pthread_create");

The pthread_create function returns an error code, and does not place it into errno. So calling perror is useless.

You can use the strerror function to convert the returned value to a message.

//pops an element from stack
//return NULL if there's no element in the stack
void * pop(Stack * stck){
   struct stack * de;
   void * el;
   de = *stck;
   *stck = (*stck)->next;
   if(de != NULL ){

The variable ``de'' is holds a copy of the original expression ``*stck''.

If ``de'' can be null, don't you think that the original ``*stck'' can also be null? That means the stack is empty.

If the stack is empty, ``*stck'' being null, don't you think it's wrong to evaluate ``(*stck)->next'' ?


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux