Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
Icecast-Server
Commits
7cba708a
Commit
7cba708a
authored
May 25, 2018
by
Philipp Schafft
🦁
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Feature: Make refobject more general useful
parent
a9d391ff
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
56 additions
and
4 deletions
+56
-4
src/refobject.c
src/refobject.c
+49
-1
src/refobject.h
src/refobject.h
+7
-3
No files found.
src/refobject.c
View file @
7cba708a
...
...
@@ -22,7 +22,7 @@
#define TO_BASE(x) ((refobject_base_t*)(x))
#endif
refobject_t
refobject_new
(
size_t
len
,
refobject_free
freecb
,
void
*
userdata
)
refobject_t
refobject_new
(
size_t
len
,
refobject_free
_t
freecb
,
void
*
userdata
,
const
char
*
name
,
refobject_t
parent
)
{
refobject_base_t
*
ret
=
NULL
;
...
...
@@ -39,6 +39,23 @@ refobject_t refobject_new(size_t len, refobject_free freecb, void *userdata)
thread_mutex_create
(
&
(
ret
->
lock
));
if
(
name
)
{
ret
->
name
=
strdup
(
name
);
if
(
!
ret
->
name
)
{
refobject_unref
(
ret
);
return
(
refobject_t
)(
refobject_base_t
*
)
NULL
;
}
}
if
(
TO_BASE
(
parent
)
!=
NULL
)
{
if
(
refobject_ref
(
parent
)
!=
0
)
{
refobject_unref
(
ret
);
return
(
refobject_t
)(
refobject_base_t
*
)
NULL
;
}
ret
->
parent
=
parent
;
}
return
(
refobject_t
)
ret
;
}
...
...
@@ -74,6 +91,9 @@ int refobject_unref(refobject_t self)
if
(
base
->
userdata
)
free
(
base
->
userdata
);
if
(
base
->
name
)
free
(
base
->
name
);
thread_mutex_unlock
(
&
(
base
->
lock
));
thread_mutex_destroy
(
&
(
base
->
lock
));
...
...
@@ -105,3 +125,31 @@ int refobject_set_userdata(refobject_t self, void *userdata)
return
0
;
}
const
char
*
refobject_get_name
(
refobject_t
self
)
{
const
char
*
ret
;
if
(
TO_BASE
(
self
)
==
NULL
)
return
NULL
;
thread_mutex_lock
(
&
(
TO_BASE
(
self
)
->
lock
));
ret
=
TO_BASE
(
self
)
->
name
;
thread_mutex_unlock
(
&
(
TO_BASE
(
self
)
->
lock
));
return
ret
;
}
refobject_t
refobject_get_parent
(
refobject_t
self
)
{
refobject_t
ret
;
if
(
TO_BASE
(
self
)
==
NULL
)
return
(
refobject_t
)(
refobject_base_t
*
)
NULL
;
thread_mutex_lock
(
&
(
TO_BASE
(
self
)
->
lock
));
ret
=
TO_BASE
(
self
)
->
parent
;
thread_mutex_unlock
(
&
(
TO_BASE
(
self
)
->
lock
));
return
ret
;
}
src/refobject.h
View file @
7cba708a
...
...
@@ -14,19 +14,23 @@
#include "icecasttypes.h"
#include "compat.h"
typedef
void
(
*
refobject_free
)(
refobject_t
self
,
void
**
userdata
);
typedef
void
(
*
refobject_free
_t
)(
refobject_t
self
,
void
**
userdata
);
struct
refobject_base_tag
{
size_t
refc
;
mutex_t
lock
;
void
*
userdata
;
refobject_free
freecb
;
refobject_free_t
freecb
;
char
*
name
;
refobject_t
parent
;
};
refobject_t
refobject_new
(
size_t
len
,
refobject_free
freecb
,
void
*
userdata
);
refobject_t
refobject_new
(
size_t
len
,
refobject_free
_t
freecb
,
void
*
userdata
,
const
char
*
name
,
refobject_t
parent
);
int
refobject_ref
(
refobject_t
self
);
int
refobject_unref
(
refobject_t
self
);
void
*
refobject_get_userdata
(
refobject_t
self
);
int
refobject_set_userdata
(
refobject_t
self
,
void
*
userdata
);
const
char
*
refobject_get_name
(
refobject_t
self
);
refobject_t
refobject_get_parent
(
refobject_t
self
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment