summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-16 20:04:33 +0000
committerirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-16 20:04:33 +0000
commitae2eea130465a785fe48838626fe7aacffbdb26f (patch)
tree52ee246650c52a625dd5743466eb1f1c9479a563
parent640d0815ab25a360136cb82d701105167fca9148 (diff)
downloadATCD-ae2eea130465a785fe48838626fe7aacffbdb26f.tar.gz
*** empty log message ***
-rw-r--r--ChangeLog-98b7
-rw-r--r--ace/Hash_Map_Manager.cpp31
-rw-r--r--ace/Hash_Map_Manager.h16
-rw-r--r--ace/Map_Manager.cpp39
-rw-r--r--ace/Map_Manager.h18
5 files changed, 61 insertions, 50 deletions
diff --git a/ChangeLog-98b b/ChangeLog-98b
index dbe1283ccab..6b9f24d5ae5 100644
--- a/ChangeLog-98b
+++ b/ChangeLog-98b
@@ -1,3 +1,10 @@
+Fri Oct 16 14:57:58 1998 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * ace/Hash_Map_Manager and Map_Manager: Fixed the operator++ and
+ operator--. Also, moved the guard from the individual methods
+ to the iterator. Now, the read guard is held for the life time
+ of the iterator.
+
Fri Oct 16 14:51:57 1998 Nanbor Wang <nanbor@cs.wustl.edu>
* ace/OS.cpp (thr_create): Made sure if users don't specify
diff --git a/ace/Hash_Map_Manager.cpp b/ace/Hash_Map_Manager.cpp
index 86f62013be2..492d6f8097d 100644
--- a/ace/Hash_Map_Manager.cpp
+++ b/ace/Hash_Map_Manager.cpp
@@ -597,9 +597,14 @@ ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Hash_Map_Iterator_Base
int head)
: map_man_ (&mm),
index_ (head != 0 ? -1 : ACE_static_cast (ssize_t, mm.total_size_)),
- next_ (0)
+ next_ (0),
+ guard_ (this->map_man_->lock_)
{
ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Hash_Map_Iterator_Base");
+
+ if (this->guard_.locked () == 0)
+ return;
+
if (mm.table_ != 0)
this->next_ = &mm.table_[head != 0 ? 0 : mm.total_size_ - 1];
}
@@ -608,7 +613,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Hash_Map_Entry<EXT_ID, INT_ID> *&entry)
{
ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
if (this->map_man_->table_ != 0
&& this->index_ < ACE_static_cast (ssize_t, this->map_man_->total_size_)
@@ -626,7 +630,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const
{
ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
return this->map_man_->table_ == 0
|| this->index_ >= ACE_static_cast (ssize_t, this->map_man_->total_size_)
@@ -637,7 +640,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void)
{
ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
if (this->map_man_->table_ == 0)
return -1;
@@ -669,7 +671,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void)
{
ACE_TRACE ("ACE_Hash_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
if (this->map_man_->table_ == 0)
return -1;
@@ -769,7 +770,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
{
ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
this->forward_i ();
return *this;
@@ -780,7 +780,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
{
ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->forward_i ();
@@ -792,7 +791,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
{
ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
this->reverse_i ();
return *this;
@@ -803,7 +801,6 @@ ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
{
ACE_TRACE ("ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
@@ -841,11 +838,9 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
{
ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
- ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
- return retv;
+ return *this;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -853,10 +848,10 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
{
ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
+ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
- return *this;
+ return retv;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -864,11 +859,9 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
{
ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
- ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->forward_i ();
- return retv;
+ return *this;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -876,10 +869,10 @@ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
{
ACE_TRACE ("ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, *this);
+ ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->forward_i ();
- return *this;
+ return retv;
}
#endif /* ACE_HASH_MAP_MANAGER_C */
diff --git a/ace/Hash_Map_Manager.h b/ace/Hash_Map_Manager.h
index 1abc494c42d..c7559e9f3ef 100644
--- a/ace/Hash_Map_Manager.h
+++ b/ace/Hash_Map_Manager.h
@@ -18,6 +18,7 @@
#define ACE_HASH_MAP_MANAGER_H
#include "ace/OS.h"
+#include "ace/Synch.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
#pragma once
@@ -394,6 +395,9 @@ protected:
ACE_Hash_Map_Entry<EXT_ID, INT_ID> *next_;
// Keeps track of how far we've advanced in a linked list in each
// table slot.
+
+ ACE_Read_Guard<ACE_LOCK> guard_;
+ // Read guard for the life time of the iterator.
};
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -427,10 +431,10 @@ public:
// Postfix advance.
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
- // Prefix advance.
+ // Prefix reverse.
ACE_Hash_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
- // Postfix advance.
+ // Postfix reverse.
ACE_ALLOC_HOOK_DECLARE;
// Declare the dynamic allocation hooks.
@@ -461,16 +465,16 @@ public:
// = STL styled iteration, compare, and reference functions.
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void);
- // Postfix advance.
+ // Prefix reverse.
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int);
- // Prefix advance.
+ // Postfix reverse.
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
- // Postfix advance.
+ // Prefix advance.
ACE_Hash_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
- // Prefix advance.
+ // Postfix advance.
ACE_ALLOC_HOOK_DECLARE;
// Declare the dynamic allocation hooks.
diff --git a/ace/Map_Manager.cpp b/ace/Map_Manager.cpp
index fb2690bdf7e..8e351ef6529 100644
--- a/ace/Map_Manager.cpp
+++ b/ace/Map_Manager.cpp
@@ -4,7 +4,6 @@
#define ACE_MAP_MANAGER_C
#define ACE_BUILD_DLL
-#include "ace/Synch.h"
#include "ace/Malloc.h"
#include "ace/Service_Config.h"
#include "ace/Map_Manager.h"
@@ -611,9 +610,14 @@ ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::dump_i (void) const
template <class EXT_ID, class INT_ID, class ACE_LOCK>
ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base (ACE_Map_Manager<EXT_ID, INT_ID, ACE_LOCK> &mm, int head)
: map_man_ (&mm),
- next_ (-1)
+ next_ (-1),
+ guard_ (this->map_man_->lock_)
{
ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::ACE_Map_Iterator_Base");
+
+ if (this->guard_.locked () == 0)
+ return;
+
if (head == 0)
this->next_ = this->map_man_->cur_size_;
}
@@ -622,7 +626,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next (ACE_Map_Entry<EXT_ID, INT_ID> *&mm)
{
ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::next");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
if (this->map_man_->search_structure_ != 0
// Note that this->next_ is never negative at this point...
@@ -640,7 +643,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done (void) const
{
ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::done");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
return this->map_man_->search_structure_ == 0
// Note that this->next_ is never negative at this point...
@@ -653,7 +655,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i (void)
{
ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::forward_i");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
for (++this->next_;
ACE_static_cast(size_t, this->next_) < this->map_man_->cur_size_
@@ -667,7 +668,6 @@ template <class EXT_ID, class INT_ID, class ACE_LOCK> int
ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i (void)
{
ACE_TRACE ("ACE_Map_Iterator_Base<EXT_ID, INT_ID, ACE_LOCK>::reverse_i");
- ACE_READ_GUARD_RETURN (ACE_LOCK, ace_mon, this->map_man_->lock_, -1);
for (--this->next_;
this->next_ >= 0
@@ -754,7 +754,8 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
{
ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)");
- this->reverse_i ();
+ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
+ this->forward_i ();
return retv;
}
@@ -763,11 +764,9 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
{
ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)");
- ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
- ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
- this->forward_i ();
- return retv;
+ this->reverse_i ();
+ return *this;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -775,8 +774,10 @@ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
{
ACE_TRACE ("ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)");
+
+ ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
- return *this;
+ return retv;
}
ACE_ALLOC_HOOK_DEFINE(ACE_Map_Reverse_Iterator)
@@ -810,10 +811,9 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)
{
ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (void)");
- ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
- return retv;
+ return *this;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -821,8 +821,10 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)
{
ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator++ (int)");
+
+ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->reverse_i ();
- return *this;
+ return retv;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -830,10 +832,9 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)
{
ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (void)");
- ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->forward_i ();
- return retv;
+ return *this;
}
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -841,8 +842,10 @@ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)
{
ACE_TRACE ("ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK>::operator-- (int)");
+
+ ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> retv (*this);
this->forward_i ();
- return *this;
+ return retv;
}
#endif /* ACE_MAP_MANAGER_C */
diff --git a/ace/Map_Manager.h b/ace/Map_Manager.h
index f9941dbcd4d..0e3c0b4fbb6 100644
--- a/ace/Map_Manager.h
+++ b/ace/Map_Manager.h
@@ -17,7 +17,8 @@
#if !defined (ACE_MAP_MANAGER_H)
#define ACE_MAP_MANAGER_H
-#include "ace/ACE.h"
+#include "ace/OS.h"
+#include "ace/Synch.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
#pragma once
@@ -336,6 +337,9 @@ protected:
ssize_t next_;
// Keeps track of how far we've advanced...
+
+ ACE_Read_Guard<ACE_LOCK> guard_;
+ // Read guard for the life time of the iterator.
};
template <class EXT_ID, class INT_ID, class ACE_LOCK>
@@ -367,10 +371,10 @@ public:
// Postfix advance.
ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
- // Prefix advance.
+ // Prefix reverse.
ACE_Map_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
- // Postfix advance.
+ // Postfix reverse.
ACE_ALLOC_HOOK_DECLARE;
// Declare the dynamic allocation hooks.
@@ -399,16 +403,16 @@ public:
// = STL styled iteration, compare, and reference functions.
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator++ (void);
- // Postfix advance.
+ // Prefix reverse.
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator++ (int);
- // Prefix advance.
+ // Postfix reverse.
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> &operator-- (void);
- // Postfix advance.
+ // Prefix advance.
ACE_Map_Reverse_Iterator<EXT_ID, INT_ID, ACE_LOCK> operator-- (int);
- // Prefix advance.
+ // Postfix advance.
ACE_ALLOC_HOOK_DECLARE;
// Declare the dynamic allocation hooks.