summaryrefslogtreecommitdiff
path: root/src/vidisp.c
diff options
context:
space:
mode:
authorAlfred E. Heggestad <alfred.heggestad@gmail.com>2017-05-26 12:15:19 +0200
committerGitHub <noreply@github.com>2017-05-26 12:15:19 +0200
commit8096fa45a71f0f1cbc93881e3e5733a4e697d75b (patch)
tree0c49e07fd3b58c4797f3604bd4f2124c038bc401 /src/vidisp.c
parentebbf920a502d6d460ff3ea8a57db0c624e3a0747 (diff)
Vidisp api reentrant (#258)
* vidisp: make the API re-entrant * vidisp: update all modules to re-entrant API
Diffstat (limited to 'src/vidisp.c')
-rw-r--r--src/vidisp.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/vidisp.c b/src/vidisp.c
index 94ceee5..d267f58 100644
--- a/src/vidisp.c
+++ b/src/vidisp.c
@@ -14,9 +14,6 @@ struct vidisp_st {
};
-static struct list vidispl = LIST_INIT;
-
-
static void destructor(void *arg)
{
struct vidisp *vd = arg;
@@ -29,6 +26,7 @@ static void destructor(void *arg)
* Register a Video output display
*
* @param vp Pointer to allocated Video Display
+ * @param vidispl List of Video-displays
* @param name Name of Video Display
* @param alloch Allocation handler
* @param updateh Update handler
@@ -37,20 +35,20 @@ static void destructor(void *arg)
*
* @return 0 if success, otherwise errorcode
*/
-int vidisp_register(struct vidisp **vp, const char *name,
+int vidisp_register(struct vidisp **vp, struct list *vidispl, const char *name,
vidisp_alloc_h *alloch, vidisp_update_h *updateh,
vidisp_disp_h *disph, vidisp_hide_h *hideh)
{
struct vidisp *vd;
- if (!vp)
+ if (!vp || !vidispl)
return EINVAL;
vd = mem_zalloc(sizeof(*vd), destructor);
if (!vd)
return ENOMEM;
- list_append(&vidispl, &vd->le, vd);
+ list_append(vidispl, &vd->le, vd);
vd->name = name;
vd->alloch = alloch;
@@ -65,11 +63,11 @@ int vidisp_register(struct vidisp **vp, const char *name,
}
-const struct vidisp *vidisp_find(const char *name)
+const struct vidisp *vidisp_find(const struct list *vidispl, const char *name)
{
struct le *le;
- for (le = vidispl.head; le; le = le->next) {
+ for (le = list_head(vidispl); le; le = le->next) {
struct vidisp *vd = le->data;
if (str_isset(name) && 0 != str_casecmp(name, vd->name))
@@ -87,6 +85,7 @@ const struct vidisp *vidisp_find(const char *name)
* Allocate a video display state
*
* @param stp Pointer to allocated display state
+ * @param vidispl List of Video-displays
* @param name Name of video display
* @param prm Video display parameters (optional)
* @param dev Display device
@@ -95,11 +94,12 @@ const struct vidisp *vidisp_find(const char *name)
*
* @return 0 if success, otherwise errorcode
*/
-int vidisp_alloc(struct vidisp_st **stp, const char *name,
+int vidisp_alloc(struct vidisp_st **stp, struct list *vidispl,
+ const char *name,
struct vidisp_prm *prm, const char *dev,
vidisp_resize_h *resizeh, void *arg)
{
- struct vidisp *vd = (struct vidisp *)vidisp_find(name);
+ struct vidisp *vd = (struct vidisp *)vidisp_find(vidispl, name);
if (!vd)
return ENOENT;