~ubuntu-branches/ubuntu/raring/virtualbox-ose/raring

« back to all changes in this revision

Viewing changes to src/VBox/Main/include/hgcm/HGCMObjects.h

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2011-01-30 23:27:25 UTC
  • mfrom: (0.3.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20110130232725-2ouajjd2ggdet0zd
Tags: 4.0.2-dfsg-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Add Apport hook.
    - debian/virtualbox-ose.files/source_virtualbox-ose.py
    - debian/virtualbox-ose.install
  - Drop *-source packages.
* Drop ubuntu-01-fix-build-gcc45.patch, fixed upstream.
* Drop ubuntu-02-as-needed.patch, added to the Debian package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/** @file
2
 
 *
3
 
 * HGCMObjects - Host-Guest Communication Manager objects header.
4
 
 */
5
 
 
6
 
/*
7
 
 * Copyright (C) 2006-2007 Oracle Corporation
8
 
 *
9
 
 * This file is part of VirtualBox Open Source Edition (OSE), as
10
 
 * available from http://www.virtualbox.org. This file is free software;
11
 
 * you can redistribute it and/or modify it under the terms of the GNU
12
 
 * General Public License (GPL) as published by the Free Software
13
 
 * Foundation, in version 2 as it comes in the "COPYING" file of the
14
 
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15
 
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16
 
 */
17
 
 
18
 
#ifndef __HGCMOBJECTS__H
19
 
#define __HGCMOBJECTS__H
20
 
 
21
 
#define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM
22
 
#include "Logging.h"
23
 
 
24
 
#include <iprt/assert.h>
25
 
#include <iprt/avl.h>
26
 
#include <iprt/critsect.h>
27
 
#include <iprt/asm.h>
28
 
 
29
 
class HGCMObject;
30
 
 
31
 
typedef struct _ObjectAVLCore
32
 
{
33
 
    AVLULNODECORE AvlCore;
34
 
    HGCMObject *pSelf;
35
 
} ObjectAVLCore;
36
 
 
37
 
typedef enum
38
 
{
39
 
    HGCMOBJ_CLIENT,
40
 
    HGCMOBJ_THREAD,
41
 
    HGCMOBJ_MSG,
42
 
    HGCMOBJ_SizeHack   = 0x7fffffff
43
 
} HGCMOBJ_TYPE;
44
 
 
45
 
class HGCMObject
46
 
{
47
 
    private:
48
 
        friend uint32_t hgcmObjMake(HGCMObject *pObject, uint32_t u32HandleIn);
49
 
 
50
 
        int32_t volatile m_cRefs;
51
 
        HGCMOBJ_TYPE     m_enmObjType;
52
 
 
53
 
        ObjectAVLCore   m_core;
54
 
 
55
 
    protected:
56
 
        virtual ~HGCMObject()
57
 
        {};
58
 
 
59
 
    public:
60
 
        HGCMObject(HGCMOBJ_TYPE enmObjType)
61
 
            : m_cRefs(0)
62
 
        {
63
 
            this->m_enmObjType  = enmObjType;
64
 
        };
65
 
 
66
 
        void Reference()
67
 
        {
68
 
            int32_t refCnt = ASMAtomicIncS32(&m_cRefs);
69
 
            NOREF(refCnt);
70
 
            Log(("Reference: refCnt = %d\n", refCnt));
71
 
        }
72
 
 
73
 
        void Dereference()
74
 
        {
75
 
            int32_t refCnt = ASMAtomicDecS32(&m_cRefs);
76
 
 
77
 
            Log(("Dereference: refCnt = %d\n", refCnt));
78
 
 
79
 
            AssertRelease(refCnt >= 0);
80
 
 
81
 
            if (refCnt)
82
 
            {
83
 
                return;
84
 
            }
85
 
 
86
 
            delete this;
87
 
        }
88
 
 
89
 
        uint32_t Handle()
90
 
        {
91
 
            return m_core.AvlCore.Key;
92
 
        };
93
 
 
94
 
        HGCMOBJ_TYPE Type()
95
 
        {
96
 
            return m_enmObjType;
97
 
        };
98
 
};
99
 
 
100
 
int hgcmObjInit();
101
 
 
102
 
void hgcmObjUninit();
103
 
 
104
 
uint32_t hgcmObjGenerateHandle(HGCMObject *pObject);
105
 
uint32_t hgcmObjAssignHandle(HGCMObject *pObject, uint32_t u32Handle);
106
 
 
107
 
void hgcmObjDeleteHandle(uint32_t handle);
108
 
 
109
 
HGCMObject *hgcmObjReference(uint32_t handle, HGCMOBJ_TYPE enmObjType);
110
 
 
111
 
void hgcmObjDereference(HGCMObject *pObject);
112
 
 
113
 
uint32_t hgcmObjQueryHandleCount();
114
 
void     hgcmObjSetHandleCount(uint32_t u32HandleCount);
115
 
 
116
 
#endif /* __HGCMOBJECTS__H */