]> git.wh0rd.org Git - ICEs.git/blob - 318007/buf0buf.i.1
more ices
[ICEs.git] / 318007 / buf0buf.i.1
1 typedef unsigned long int ulint;
2 typedef long int lint;
3 typedef struct rw_lock_struct rw_lock_t;
4 struct rw_lock_struct {
5         volatile lint lock_word;
6         volatile ulint reader_count;
7         volatile ulint writer;
8 };
9 static inline ulint rw_lock_x_lock_func_nowait(rw_lock_t * lock,
10                                                const char *file_name,
11                                                ulint line)
12 {
13         if (lock->reader_count == 0) {
14                 if (__sync_lock_test_and_set(&(lock->writer), 351) == 350) {
15                       retry_x_lock:if (__sync_sub_and_fetch(&(lock->lock_word), 0x00100000)
16                             == 0) {
17                                 if (__sync_fetch_and_add
18                                     (&(lock->lock_word), 0x00100000) == 0)
19                                         goto retry_x_lock;
20                         }
21                 }
22         }
23 }
24
25 typedef struct mtr_struct mtr_t;
26 typedef struct buf_block_struct buf_block_t;
27 typedef unsigned char buf_frame_t;
28 struct buf_block_struct {
29         rw_lock_t lock;
30         struct {
31         } awe_LRU_free_mapped;
32 };
33 buf_frame_t *buf_page_get_gen(ulint space, ulint offset, ulint rw_latch,
34                               buf_frame_t * guess, ulint mode, const char *file,
35                               ulint line, mtr_t * mtr)
36 {
37         buf_block_t *block;
38         ulint success;
39         if (mode == 12) {
40                 if (rw_latch == 1) {
41                         success =
42                             rw_lock_x_lock_func_nowait(&(block->lock), file,
43                                                        line);
44                 }
45         }
46 }