More stability fixes. This code has been running on the dual xeon for
[mono.git] / mono / io-layer / collection.h
1 /*
2  * collection.h:  Garbage collection for handles
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2004 Novell, Inc.
8  */
9
10 #ifndef _WAPI_COLLECTION_H_
11 #define _WAPI_COLLECTION_H_
12
13 #include <glib.h>
14
15 #define _WAPI_HANDLE_COLLECTION_UNSAFE                          \
16         {                                                       \
17                 guint32 _wapi_save_start;                       \
18                 int _wapi_thr_ret;                                      \
19                                                                         \
20                 do {                                                    \
21                         _wapi_save_start = (guint32)(time(NULL) & 0xFFFFFFFF);\
22                                                                         \
23                         _wapi_thr_ret = _wapi_timestamp_exclusion (&_wapi_shared_layout->master_timestamp, _wapi_save_start); \
24                         if (_wapi_thr_ret == EBUSY) {                   \
25                                 _wapi_handle_spin (100);                \
26                         }                                               \
27                 } while (_wapi_thr_ret == EBUSY);                       \
28                 g_assert (_wapi_thr_ret == 0);
29
30                 
31 #define _WAPI_HANDLE_COLLECTION_SAFE                            \
32                 _wapi_thr_ret = _wapi_timestamp_release (&_wapi_shared_layout->master_timestamp, _wapi_save_start); \
33         }
34         
35
36 extern void _wapi_collection_init (void);
37 extern void _wapi_handle_collect (void);
38
39 #endif /* _WAPI_COLLECTION_H_ */