Thread parameter in ANSI C makes a segmentation fault


 
Thread Tools Search this Thread
Top Forums Programming Thread parameter in ANSI C makes a segmentation fault
# 1  
Old 05-05-2011
Thread parameter in ANSI C makes a segmentation fault

The creation of thread.
Code:
void Client_Constructor ( const char* IPAddr ) {
    pthread_t tid; 
    pthread_attr_t rx;  

    /* Create separate memory for client argument */
    struct ThreadArgs *threadArgs;
    if ( ( threadArgs = ( struct ThreadArgs* ) malloc( sizeof( struct ThreadArgs ) ) ) == NULL )
        exit( -1 );
    threadArgs->pos = 111;

    pthread_rwlock_wrlock( &rwlock );
    node = ....;
    if ( node->state == DISCONNECTED ) {  <-node requires a r/w lock.
        pthread_attr_init( &rx );
        pthread_attr_setdetachstate( &rx, PTHREAD_CREATE_DETACHED );
        pthread_create( &tid, &rx, THREAD_BODY, ( void* )threadArgs );
    }
    pthread_rwlock_unlock( &rwlock );
}

Thread body
Code:
static void* THREAD_BODY ( void* v ) {
    int sockfd;
    char IPStr[ 16 ];
    int index = ( ( struct ThreadArgs* ) v )->pos; free( v ); <-segmentation fault here
.....
}

These code is so strange, when I run the program more than few hours, then a segmentation fault comes. I also dump the log and use gdb to analyze it, the information is shown below
Code:
Program terminated with signal 6, Aborted.
#0  0xb7de1a16 in ?? () from /lib/libc.so.6
(gdb) where
#0  0xb7de1a16 in ?? () from /lib/libc.so.6
#1  0xb7de3318 in ?? () from /lib/libc.so.6
#2  0xb7e1cfdd in fputws () from /lib/libc.so.6
#3  0xb7e1d114 in ?? () from /lib/libc.so.6
#4  0xb7e287ba in realloc () from /lib/libc.so.6
#5  0xb7e28040 in ?? () from /lib/libc.so.6
#6  0xb7e28339 in ?? () from /lib/libc.so.6
#7  0xb7e2476b in ?? () from /lib/libc.so.6
#8  0x0805e945 in THREAD_BODY (v=0x1838b9b0) at Client.c:167
#9  0xb7efffc0 in pthread_create@@GLIBC_2.1 () from /lib/libpthread.so.0
#10 0xb7e8497e in ?? () from /lib/libc.so.6

It anyone give me some suggestions? Is it related to pthread_rwlock?
# 2  
Old 05-05-2011
Are you working on Linux? If so, can you run your program under valgrind supervision?
This User Gave Thanks to Loic Domaigne For This Post:
# 3  
Old 05-05-2011
Quote:
Originally Posted by Loic Domaigne
Are you working on Linux? If so, can you run your program under valgrind supervision?
Thanks. I try it now. However, I can run the program under the text mode only since our system doesn't have a GUI. Is valgrind able to work in text mode?
# 4  
Old 05-05-2011
Try fprintf(stderr, "%p\n", v); to see if the pointer value has become corrupted somehow.

If all you're passing is one integer, why allocate memory at all?

void *value=(void *)42;
int ivalue=(int)(value);

If that's not all you're doing, post a more complete portion of your code so we can see what's actually going on.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 05-05-2011
Quote:
Originally Posted by Corona688
Try fprintf(stderr, "%p\n", v); to see if the pointer value has become corrupted somehow.

If all you're passing is one integer, why allocate memory at all?

void *value=(void *)42;
int ivalue=(int)(value);

If that's not all you're doing, post a more complete portion of your code so we can see what's actually going on.
Thanks, I will use fprintf to catch the pointer value.

Before I post the problem on the forum, I tried to use
Code:
 void *value=(void *)42;
  int ivalue=(int)(value);

But the problem still happened. At that time, I wrote these codes in another way; it is the reason why I use struct to pass parameters.

I have another idea, is it the problem cause by different compile options?
Code:
 gcc -O3 *.c

Code:
  gcc *.c

However, I have 10-20 source files in the project, it is difficult to put all codes in this forum.

Besides, I used outl(...), iopl(...) to control SPI. Are they also affect this threading?
# 6  
Old 05-05-2011
Quote:
Originally Posted by sehang
Thanks, I will use fprintf to catch the pointer value.

Before I post the problem on the forum, I tried to use
Code:
 void *value=(void *)42;
  int ivalue=(int)(value);

But the problem still happened.
Then the problem has nothing to do with that line.
Quote:
I have another idea, is it the problem cause by different compile options?
Code:
 gcc -O3 *.c

Code:
  gcc *.c

-O3 by itself doesn't cause it to crash. However it can expose latent bugs in your program.
Quote:
Besides, I used outl(...), iopl(...) to control SPI. Are they also affect this threading?
This is an extremely poor design and I can't guarantee anything about it. Given the way modern systems work I can't even guarantee you're actually talking to I/O ports. Is it possible to use an actual device driver instead?
# 7  
Old 05-05-2011
Quote:
Originally Posted by Corona688
Then the problem has nothing to do with that line. -O3 by itself doesn't cause it to crash. However it can expose latent bugs in your program. This is an extremely poor design and I can't guarantee anything about it. Given the way modern systems work I can't even guarantee you're actually talking to I/O ports. Is it possible to use an actual device driver instead?
So that means using -O3 in multi-threading is a bad idea?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

C. To segmentation fault or not to segmentation fault, that is the question.

Oddities with gcc, 2.95.3 for the AMIGA and 4.2.1 for MY current OSX 10.14.1... I am creating a basic calculator for the AMIGA ADE *NIX emulator in C as it does not have one. Below are two very condensed snippets of which I have added the results inside the each code section. IMPORTANT!... (11 Replies)
Discussion started by: wisecracker
11 Replies

2. Programming

Segmentation fault

I keep getting this fault on a lot of the codes I write, I'm not exactly sure why so I'd really appreciate it if someone could explain the idea to me. For example this code #include <stdio.h> main() { unsigned long a=0; unsigned long b=0; int z; { printf("Enter two... (2 Replies)
Discussion started by: sizzler786
2 Replies

3. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

4. UNIX for Advanced & Expert Users

segmentation fault with ps

What does this mean and why is this happening? $ ps -ef | grep ocular Segmentation fault (core dumped) $ ps -ef | grep ocular Segmentation fault (core dumped) $ ps aux | grep ocular Segmentation fault (core dumped) $ ps Segmentation fault (core dumped) $ pkill okular $ ps... (1 Reply)
Discussion started by: cokedude
1 Replies

5. Programming

Segmentation fault in C

i have this code int already_there(char *client_names, char *username) { int i; for(i = 0; i<NUM; i++) { printf("HERE\n"); if (strcmp(client_names, username)==0) return(1); } return(0); } and i get a segmentation fault, whats wrong here? (7 Replies)
Discussion started by: omega666
7 Replies

6. Programming

segmentation fault.

This code is causing a segmentation fault and I can't figure out why. I'm new to UNIX and I need to learn how to avoid this segmentation fault thing. Thank you so much. Thanks also for the great answers to my last post.:):b: int main() { mysqlpp::Connection conn(false); if... (3 Replies)
Discussion started by: sepoto
3 Replies

7. Programming

segmentation fault

If I do this. Assume struct life { char *nolife; } struct life **life; // malloc initialization & everything if(life->nolife == 0) Would I get error at life->nolife if it is equal to 0. wrong accession? (3 Replies)
Discussion started by: joey
3 Replies

8. AIX

Segmentation fault

Hi , During execution a backup binary i get following error "Program error 11 (Segmentation fault), saving core file in '/usr/datatools" Riyaz (2 Replies)
Discussion started by: rshaikh
2 Replies

9. Programming

segmentation fault

ive written my code in C for implementation of a simple lexical analyser using singly linked list hence am making use of dynamic allocation,but when run in linux it gives a segmentation fault is it cause of the malloc function that ive made use of????any suggestions as to what i could do??? thank... (8 Replies)
Discussion started by: rockgal
8 Replies

10. Programming

Hi! segmentation fault

I have written a program which takes a directory as command line arguments and displays all the dir and files in it. I don't know why I have a problem with the /etc directory.It displays all the directories and files untill it reaches a sub directory called peers which is in /etc/ppp/peers.the... (4 Replies)
Discussion started by: vijlak
4 Replies
Login or Register to Ask a Question