source: titan/titan/oldentry.h @ 33139

Last change on this file since 33139 was 23286, checked in by nit, 11 years ago

[titan] cleanup

File size: 2.0 KB
Line 
1#ifndef OLDENTRY_H
2#define OLDENTRY_H
3
4void oldentrythreadfunc(struct stimerthread* self)
5{
6        debug(401, "start oldentry thread");
7
8        m_lock(&status.oldentrymutex, 18);
9        struct oldentry* prev = oldentry, *node = oldentry;
10
11        while(node != NULL)
12        {
13                prev = node;
14                node = node->next;
15                if(prev->del < time(NULL))
16                        deloldentry(prev, 1);
17        }
18
19        m_unlock(&status.oldentrymutex, 18);
20        debug(401, "end oldentry thread");
21}
22
23//type 0: epg
24//type 1: download
25//type 2: copyfile
26struct oldentry* addoldentry(void* entry, int type, time_t del, struct oldentry* last)
27{
28        struct oldentry *newnode = NULL, *node = NULL;
29
30        newnode = (struct oldentry*)malloc(sizeof(struct oldentry));   
31        if(newnode == NULL)
32        {
33                err("no mem");
34                return NULL;
35        }
36
37        memset(newnode, 0, sizeof(struct oldentry));
38
39        newnode->entry = entry;
40        newnode->type = type;
41        newnode->del = del;
42
43        m_lock(&status.oldentrymutex, 18);
44        node = oldentry;
45
46        if(node != NULL)
47        {
48                if(last == NULL)
49                {
50                        while(node->next != NULL)
51                                node = node->next;
52                        node->next = newnode;
53                }
54                else
55                        last->next = newnode;
56        }
57        else
58                oldentry = newnode;
59
60        m_unlock(&status.oldentrymutex, 18);
61        return newnode;
62}
63
64//flag 0: lock
65//flag 1: no lock
66void deloldentry(struct oldentry *entry, int flag)
67{
68        if(flag == 0) m_lock(&status.oldentrymutex, 18);
69        struct oldentry *node = oldentry, *prev = oldentry;
70
71        while(node != NULL)
72        {
73                if(node == entry)
74                {
75                        if(node == oldentry)
76                                oldentry = node->next;
77                        else
78                                prev->next = node->next;
79
80                        if(node->type == 0)
81                                deloldentryepg(node->entry);
82                        else if(node->type == 1)
83                                free(node->entry);
84                        else if(node->type == 2)
85                                free(node->entry);
86                       
87                        node->entry = NULL;
88
89                        free(node);
90                        node = NULL;
91                        break;
92                }
93
94                prev = node;
95                node = node->next;
96        }
97
98        if(flag == 0) m_unlock(&status.oldentrymutex, 18);
99}
100
101void freeoldentry()
102{
103        m_lock(&status.oldentrymutex, 18);
104        struct oldentry *node = oldentry, *prev = oldentry;
105
106        while(node != NULL)
107        {
108                prev = node;
109                node = node->next;
110                if(prev != NULL)
111                        deloldentry(prev, 1);
112        }
113
114        m_unlock(&status.oldentrymutex, 18);
115}
116
117#endif
Note: See TracBrowser for help on using the repository browser.