~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to audio/audio_pt_int.c

  • Committer: ths
  • Date: 2007-09-16 21:08:06 UTC
  • Revision ID: git-v1:5fafdf24ef2c090c164d4dc89684b3f379dbdd87
find -type f | xargs sed -i 's/[\t ]$//g' # on most files


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3173 c046a42c-6fe2-441c-8c8c-71466251a162

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#include "qemu-common.h"
2
 
#include "audio.h"
3
 
 
4
 
#define AUDIO_CAP "audio-pt"
5
 
 
6
 
#include "audio_int.h"
7
 
#include "audio_pt_int.h"
8
 
 
9
 
static void logerr (struct audio_pt *pt, int err, const char *fmt, ...)
10
 
{
11
 
    va_list ap;
12
 
 
13
 
    va_start (ap, fmt);
14
 
    AUD_vlog (pt->drv, fmt, ap);
15
 
    va_end (ap);
16
 
 
17
 
    AUD_log (NULL, "\n");
18
 
    AUD_log (pt->drv, "Reason: %s\n", strerror (err));
19
 
}
20
 
 
21
 
int audio_pt_init (struct audio_pt *p, void *(*func) (void *),
22
 
                   void *opaque, const char *drv, const char *cap)
23
 
{
24
 
    int err, err2;
25
 
    const char *efunc;
26
 
 
27
 
    p->drv = drv;
28
 
 
29
 
    err = pthread_mutex_init (&p->mutex, NULL);
30
 
    if (err) {
31
 
        efunc = "pthread_mutex_init";
32
 
        goto err0;
33
 
    }
34
 
 
35
 
    err = pthread_cond_init (&p->cond, NULL);
36
 
    if (err) {
37
 
        efunc = "pthread_cond_init";
38
 
        goto err1;
39
 
    }
40
 
 
41
 
    err = pthread_create (&p->thread, NULL, func, opaque);
42
 
    if (err) {
43
 
        efunc = "pthread_create";
44
 
        goto err2;
45
 
    }
46
 
 
47
 
    return 0;
48
 
 
49
 
 err2:
50
 
    err2 = pthread_cond_destroy (&p->cond);
51
 
    if (err2) {
52
 
        logerr (p, err2, "%s(%s): pthread_cond_destroy failed", cap, AUDIO_FUNC);
53
 
    }
54
 
 
55
 
 err1:
56
 
    err2 = pthread_mutex_destroy (&p->mutex);
57
 
    if (err2) {
58
 
        logerr (p, err2, "%s(%s): pthread_mutex_destroy failed", cap, AUDIO_FUNC);
59
 
    }
60
 
 
61
 
 err0:
62
 
    logerr (p, err, "%s(%s): %s failed", cap, AUDIO_FUNC, efunc);
63
 
    return -1;
64
 
}
65
 
 
66
 
int audio_pt_fini (struct audio_pt *p, const char *cap)
67
 
{
68
 
    int err, ret = 0;
69
 
 
70
 
    err = pthread_cond_destroy (&p->cond);
71
 
    if (err) {
72
 
        logerr (p, err, "%s(%s): pthread_cond_destroy failed", cap, AUDIO_FUNC);
73
 
        ret = -1;
74
 
    }
75
 
 
76
 
    err = pthread_mutex_destroy (&p->mutex);
77
 
    if (err) {
78
 
        logerr (p, err, "%s(%s): pthread_mutex_destroy failed", cap, AUDIO_FUNC);
79
 
        ret = -1;
80
 
    }
81
 
    return ret;
82
 
}
83
 
 
84
 
int audio_pt_lock (struct audio_pt *p, const char *cap)
85
 
{
86
 
    int err;
87
 
 
88
 
    err = pthread_mutex_lock (&p->mutex);
89
 
    if (err) {
90
 
        logerr (p, err, "%s(%s): pthread_mutex_lock failed", cap, AUDIO_FUNC);
91
 
        return -1;
92
 
    }
93
 
    return 0;
94
 
}
95
 
 
96
 
int audio_pt_unlock (struct audio_pt *p, const char *cap)
97
 
{
98
 
    int err;
99
 
 
100
 
    err = pthread_mutex_unlock (&p->mutex);
101
 
    if (err) {
102
 
        logerr (p, err, "%s(%s): pthread_mutex_unlock failed", cap, AUDIO_FUNC);
103
 
        return -1;
104
 
    }
105
 
    return 0;
106
 
}
107
 
 
108
 
int audio_pt_wait (struct audio_pt *p, const char *cap)
109
 
{
110
 
    int err;
111
 
 
112
 
    err = pthread_cond_wait (&p->cond, &p->mutex);
113
 
    if (err) {
114
 
        logerr (p, err, "%s(%s): pthread_cond_wait failed", cap, AUDIO_FUNC);
115
 
        return -1;
116
 
    }
117
 
    return 0;
118
 
}
119
 
 
120
 
int audio_pt_unlock_and_signal (struct audio_pt *p, const char *cap)
121
 
{
122
 
    int err;
123
 
 
124
 
    err = pthread_mutex_unlock (&p->mutex);
125
 
    if (err) {
126
 
        logerr (p, err, "%s(%s): pthread_mutex_unlock failed", cap, AUDIO_FUNC);
127
 
        return -1;
128
 
    }
129
 
    err = pthread_cond_signal (&p->cond);
130
 
    if (err) {
131
 
        logerr (p, err, "%s(%s): pthread_cond_signal failed", cap, AUDIO_FUNC);
132
 
        return -1;
133
 
    }
134
 
    return 0;
135
 
}
136
 
 
137
 
int audio_pt_join (struct audio_pt *p, void **arg, const char *cap)
138
 
{
139
 
    int err;
140
 
    void *ret;
141
 
 
142
 
    err = pthread_join (p->thread, &ret);
143
 
    if (err) {
144
 
        logerr (p, err, "%s(%s): pthread_join failed", cap, AUDIO_FUNC);
145
 
        return -1;
146
 
    }
147
 
    *arg = ret;
148
 
    return 0;
149
 
}