title: C pthread mutex: Expected expression before `{'
body: <p>I am using the pthread library to create two threads. I am using two queues to communicate the data between the two threads (producer-consumer) and hence want to have a mutex to sync the push-pops in the queue by the threads.</p>
  
  <p>But I get a compile error as follows:</p>
  
  <pre class="lang-none prettyprint-override"><code>$ gcc simple-tun.c simple-tun -lpthread
  simple-tun.c: In function ‘new_queue’:
  simple-tun.c:920:13: error: expected expression before ‘{’ token
  </code></pre>
  
  <p>The the function where I get the error is:</p>
  
  <pre><code>908 struct queue * new_queue () {
  909 
  910     struct queue * q;
  911     q = (struct queue *) malloc (sizeof(struct queue));
  912 
  913     if (q == NULL)
  914         return NULL;
  915 
  916 
  917     q-&gt;head = NULL;
  918     q-&gt;tail = NULL;
  919     q-&gt;is_empty = 1;
  920     q-&gt;mutex = PTHREAD_MUTEX_INITIALIZER;
  921 
  922     return q;
  923 }
  </code></pre>
  
  <p>structure queue is:</p>
  
  <pre><code>    struct queue {
   80     struct node * head;
   81     struct node * tail;
   82     int is_empty;
   83     pthread_mutex_t mutex;
   84 };
  </code></pre>
  
  <p>If I comment out line 920, the linker starts giving 'multiple declaration errors'</p>
  
  <pre class="lang-none prettyprint-override"><code>$ gcc simple-tun.c simple-tun -lpthread
  simple-tun: In function `settun':
  (.text+0x2b7): multiple definition of `settun'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0x1cb): first defined here
  simple-tun: In function `_fini':
  (.fini+0x0): multiple definition of `_fini'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here
  simple-tun: In function `mktun':
  (.text+0x1e2): multiple definition of `mktun'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0xf6): first defined here
  simple-tun: In function `net_connect':
  (.text+0xe27): multiple definition of `net_connect'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0x1115): first defined here
  simple-tun: In function `data_start':
  (.data+0x0): multiple definition of `__data_start'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here
  simple-tun: In function `client_connect':
  (.text+0xe95): multiple definition of `client_connect'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0x1183): first defined here
  simple-tun: In function `data_start':
  (.data+0x8): multiple definition of `__dso_handle'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/crtbegin.o:(.data+0x0): first defined here
  simple-tun:(.rodata+0x0): multiple definition of `_IO_stdin_used'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
  simple-tun: In function `server_connect':
  (.text+0xfa2): multiple definition of `server_connect'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0x1290): first defined here
  simple-tun: In function `print_usage':
  (.text+0xe05): multiple definition of `print_usage'
  /tmp/cc5Ms4xP.o:simple-tun.c:(.text+0x10f3): first defined here
  simple-tun: In function `_init':
  (.init+0x0): multiple definition of `_init'
  /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here
  /usr/lib/gcc/x86_64-linux-gnu/4.7/crtend.o:(.tm_clone_table+0x0): multiple definition of `__TMC_END__'
  simple-tun:(.data+0x10): first defined here
  /usr/bin/ld: error in simple-tun(.eh_frame); no .eh_frame_hdr table will be created.
  collect2: error: ld returned 1 exit status
  </code></pre>
  
  <p>I was not able to find a solution in my searches. Is there something fundamentally wrong with my code? Can someone help me spot what I am doing wrong?</p>
  
  <p>Please let me know if I need to post more snippets or more outputs.</p>