blob: 0a9cb33d70ed6d8acba26fb0f9bc00ec5e81a64d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include "tao/Refcounted_ObjectKey.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
ACE_INLINE
int
TAO::ObjectKey_Table::bind (const TAO::ObjectKey &key,
TAO::Refcounted_ObjectKey *&key_new)
{
key_new = 0;
int retval = 0;
{
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
ace_mon,
this->lock_,
0);
// This is a tradeoff.. We could avoid this two stage process of
// using a find () and then a bind () , which would make things
// efficient. BUT we may have to do allocation upfront and delete if
// bind () returns with an entry. We take one of the routes that
// avoids allocation.
retval = this->table_.find (key, key_new);
if (retval == -1)
{
return this->bind_i (key, key_new);
}
(void) key_new->incr_refcount ();
}
return retval;
}
ACE_INLINE
int
TAO::ObjectKey_Table::unbind (TAO::Refcounted_ObjectKey *&key_new)
{
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX,
ace_mon,
this->lock_,
0);
// If the refcount has dropped to 1, just go ahead and unbind it
// from the table.
if (key_new && key_new->decr_refcount () == 1)
{
return this->unbind_i (key_new);
}
return 0;
}
TAO_END_VERSIONED_NAMESPACE_DECL
|