2001-09-23 Dietmar Maurer <dietmar@ximian.com>
[mono.git] / mono / metadata / threads-pthread.c
1 /*
2  * threads-pthread.c: System-specific thread support
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2001 Ximian, Inc.
8  */
9
10 #include <config.h>
11 #include <glib.h>
12 #include <string.h>
13 #include <pthread.h>
14
15 #include <mono/metadata/object.h>
16 #include <mono/metadata/threads-pthread.h>
17
18 pthread_t ves_icall_System_Threading_Thread_Start_internal(MonoObject *this,
19                                                            MonoObject *start)
20 {
21         pthread_t tid;
22         MonoClassField *field;
23         void *(*start_func)(void *);
24         int ret;
25         
26         g_message("Trying to start a new thread: this (%p) start (%p)",
27                   this, start);
28
29         field=mono_class_get_field_from_name(mono_defaults.delegate_class, "method_ptr");
30         start_func= *(gpointer *)(((char *)start) + field->offset);
31         
32         if(start_func==NULL) {
33                 g_warning("Can't locate start method!");
34                 /* Not sure if 0 can't be a valid pthread_t */
35                 return(0);
36         } else {
37                 ret=pthread_create(&tid, NULL, start_func, NULL);
38                 if(ret!=0) {
39                         g_warning("pthread_create error: %s", strerror(ret));
40                         return(0);
41                 }
42         
43                 g_message("Started thread ID %ld", tid);
44                 return(tid);
45         }
46 }