[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
rpms/openais/FC-6 revision-1426.patch, NONE, 1.1 revision-1446.patch, NONE, 1.1 revision-1449.patch, NONE, 1.1 revision-1450.patch, NONE, 1.1 revision-1453.patch, NONE, 1.1 revision-1455.patch, NONE, 1.1 revision-1464.patch, NONE, 1.1 openais.spec, 1.27, 1.28
- From: fedora-cvs-commits redhat com
- To: fedora-cvs-commits redhat com
- Subject: rpms/openais/FC-6 revision-1426.patch, NONE, 1.1 revision-1446.patch, NONE, 1.1 revision-1449.patch, NONE, 1.1 revision-1450.patch, NONE, 1.1 revision-1453.patch, NONE, 1.1 revision-1455.patch, NONE, 1.1 revision-1464.patch, NONE, 1.1 openais.spec, 1.27, 1.28
- Date: Tue, 2 Oct 2007 13:21:19 -0400
Author: sdake
Update of /cvs/dist/rpms/openais/FC-6
In directory cvs.devel.redhat.com:/tmp/cvs-serv14200/FC-6
Modified Files:
openais.spec
Added Files:
revision-1426.patch revision-1446.patch revision-1449.patch
revision-1450.patch revision-1453.patch revision-1455.patch
revision-1464.patch
Log Message:
auto-import openais-0.80.3-6.fc6 on branch FC-6 from openais-0.80.3-6.fc6.src.rpm
revision-1426.patch:
totemsrp.c | 59 ++++++++++++++++++++++++++++++++++-------------------------
1 files changed, 34 insertions(+), 25 deletions(-)
--- NEW FILE revision-1426.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c (revision 1423)
+++ exec/totemsrp.c (revision 1426)
@@ -138,6 +138,11 @@
MESSAGE_TYPE_TOKEN_HOLD_CANCEL = 5, /* cancel the holding of the token */
};
+enum encapsulation_type {
+ MESSAGE_ENCAPSULATED = 1,
+ MESSAGE_NOT_ENCAPSULATED = 2
+};
+
/*
* New membership algorithm local variables
*/
@@ -673,7 +678,10 @@
{
struct totemsrp_instance *instance;
unsigned int res;
+struct orf_token suck;
+printf ("%p %p size is %d %d\n", &suck, &suck.rtr_list[0], sizeof (struct orf_token), (sizeof (struct rtr_item) * RETRANSMIT_ENTRIES_MAX));
+exit (1);
res = hdb_handle_create (&totemsrp_instance_database,
sizeof (struct totemsrp_instance), handle);
if (res != 0) {
@@ -1891,8 +1899,9 @@
sizeof (struct mcast));
memcpy (&message_item.mcast->ring_id, &instance->my_ring_id,
sizeof (struct memb_ring_id));
- message_item.mcast->header.encapsulated = 1;
+ message_item.mcast->header.encapsulated = MESSAGE_ENCAPSULATED;
message_item.mcast->header.nodeid = instance->my_id.addr[0].nodeid;
+ message_item.mcast->header.endian_detector = ENDIAN_LOCAL;
assert (message_item.mcast->header.nodeid);
message_item.iov_len = sort_queue_item->iov_len;
memcpy (&message_item.iovec, &sort_queue_item->iovec,
@@ -1987,7 +1996,7 @@
*/
message_item.mcast->header.type = MESSAGE_TYPE_MCAST;
message_item.mcast->header.endian_detector = ENDIAN_LOCAL;
- message_item.mcast->header.encapsulated = 2;
+ message_item.mcast->header.encapsulated = MESSAGE_NOT_ENCAPSULATED;
message_item.mcast->header.nodeid = instance->my_id.addr[0].nodeid;
assert (message_item.mcast->header.nodeid);
@@ -2558,14 +2567,14 @@
orf_token.token_seq = SEQNO_START_TOKEN;
orf_token.retrans_flg = 1;
instance->my_set_retrans_flg = 1;
-/*
+
if (queue_is_empty (&instance->retrans_message_queue) == 1) {
orf_token.retrans_flg = 0;
+ instance->my_set_retrans_flg = 0;
} else {
orf_token.retrans_flg = 1;
instance->my_set_retrans_flg = 1;
}
-*/
orf_token.aru = 0;
orf_token.aru = SEQNO_START_MSG - 1;
@@ -2601,6 +2610,9 @@
* TODO high delivered is really instance->my_aru, but with safe this
* could change?
*/
+ instance->my_received_flg =
+ (instance->my_aru == instance->my_high_seq_received);
+
memb_list[commit_token->memb_index].high_delivered = instance->my_high_delivered;
memb_list[commit_token->memb_index].received_flg = instance->my_received_flg;
@@ -3084,7 +3096,6 @@
unsigned int mcasted_retransmit;
unsigned int mcasted_regular;
unsigned int last_aru;
- unsigned int low_water;
#ifdef GIVEINFO
struct timeval tv_current;
@@ -3278,13 +3289,7 @@
* has recovered all messages it can recover
* (ie: its retrans queue is empty)
*/
- low_water = instance->my_aru;
- if (sq_lt_compare (last_aru, low_water)) {
- low_water = last_aru;
- }
-// TODO is this code right
- if (queue_is_empty (&instance->retrans_message_queue) == 0 ||
- low_water != instance->my_high_seq_received) {
+ if (queue_is_empty (&instance->retrans_message_queue) == 0) {
if (token->retrans_flg == 0) {
token->retrans_flg = 1;
@@ -3295,10 +3300,10 @@
token->retrans_flg = 0;
}
log_printf (instance->totemsrp_log_level_debug,
- "token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, low_water %x aru %x\n",
+ "token retrans flag is %d my set retrans flag%d retrans queue empty %d count %d, aru %x\n",
token->retrans_flg, instance->my_set_retrans_flg,
queue_is_empty (&instance->retrans_message_queue),
- instance->my_retrans_flg_count, low_water, token->aru);
+ instance->my_retrans_flg_count, token->aru);
if (token->retrans_flg == 0) {
instance->my_retrans_flg_count += 1;
} else {
@@ -3310,13 +3315,16 @@
log_printf (instance->totemsrp_log_level_debug,
"install seq %x aru %x high seq received %x\n",
instance->my_install_seq, instance->my_aru, instance->my_high_seq_received);
- if (instance->my_retrans_flg_count >= 2 && instance->my_aru >= instance->my_install_seq && instance->my_received_flg == 0) {
+ if (instance->my_retrans_flg_count >= 2 &&
+ instance->my_received_flg == 0 &&
+ sq_lte_compare (instance->my_install_seq, instance->my_aru)) {
instance->my_received_flg = 1;
instance->my_deliver_memb_entries = instance->my_trans_memb_entries;
memcpy (instance->my_deliver_memb_list, instance->my_trans_memb_list,
sizeof (struct totem_ip_address) * instance->my_trans_memb_entries);
}
- if (instance->my_retrans_flg_count >= 3 && token->aru >= instance->my_install_seq) {
+ if (instance->my_retrans_flg_count >= 3 &&
+ sq_lte_compare (instance->my_install_seq, token->aru)) {
instance->my_rotation_counter += 1;
} else {
instance->my_rotation_counter = 0;
@@ -3515,18 +3523,12 @@
memcpy (&mcast_header, msg, sizeof (struct mcast));
}
-/*
- if (mcast_header.header.encapsulated == 1) {
+ if (mcast_header.header.encapsulated == MESSAGE_ENCAPSULATED) {
sort_queue = &instance->recovery_sort_queue;
} else {
sort_queue = &instance->regular_sort_queue;
}
-*/
- if (instance->memb_state == MEMB_STATE_RECOVERY) {
- sort_queue = &instance->recovery_sort_queue;
- } else {
- sort_queue = &instance->regular_sort_queue;
- }
+
assert (msg_len < FRAME_SIZE_MAX);
#ifdef TEST_DROP_MCAST_PERCENTAGE
@@ -3853,6 +3855,8 @@
out->header.type = in->header.type;
out->header.endian_detector = ENDIAN_LOCAL;
out->header.nodeid = swab32 (in->header.nodeid);
+ out->header.encapsulated = in->header.encapsulated;
+
out->seq = swab32 (in->seq);
out->this_seqno = swab32 (in->this_seqno);
totemip_copy_endian_convert(&out->ring_id.rep, &in->ring_id.rep);
@@ -4051,7 +4055,12 @@
log_printf (instance->totemsrp_log_level_security, "Received message is too short... ignoring %d.\n", msg_len);
return;
}
-
+
+ if ((int)message_header->type >= totemsrp_message_handlers.count) {
+ log_printf (instance->totemsrp_log_level_security, "Type of received message is wrong... ignoring %d.\n", (int)message_header->type);
+ return;
+ }
+
/*
* Handle incoming message
*/
revision-1446.patch:
totemsrp.c | 3 ---
1 files changed, 3 deletions(-)
--- NEW FILE revision-1446.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c (revision 1426)
+++ exec/totemsrp.c (revision 1446)
@@ -678,10 +678,7 @@
{
struct totemsrp_instance *instance;
unsigned int res;
-struct orf_token suck;
-printf ("%p %p size is %d %d\n", &suck, &suck.rtr_list[0], sizeof (struct orf_token), (sizeof (struct rtr_item) * RETRANSMIT_ENTRIES_MAX));
-exit (1);
res = hdb_handle_create (&totemsrp_instance_database,
sizeof (struct totemsrp_instance), handle);
if (res != 0) {
revision-1449.patch:
main.c | 26 ++++++++++++++++++++------
service.c | 2 +-
service.h | 1 +
sync.c | 6 +++---
4 files changed, 25 insertions(+), 10 deletions(-)
--- NEW FILE revision-1449.patch ---
Index: exec/service.c
===================================================================
--- exec/service.c (revision 1446)
+++ exec/service.c (revision 1449)
@@ -87,7 +87,7 @@
}
};
-struct openais_service_handler *ais_service[128];
+struct openais_service_handler *ais_service[SERVICE_HANDLER_MAXIMUM_COUNT];
/*
* Adds a service handler to the object database
Index: exec/service.h
===================================================================
--- exec/service.h (revision 1446)
+++ exec/service.h (revision 1449)
@@ -44,6 +44,7 @@
#endif
#define SERVICE_ID_MAKE(a,b) ( ((a)<<16) | (b) )
+#define SERVICE_HANDLER_MAXIMUM_COUNT 64
enum openais_flow_control {
OPENAIS_FLOW_CONTROL_REQUIRED = 1,
Index: exec/sync.c
===================================================================
--- exec/sync.c (revision 1446)
+++ exec/sync.c (revision 1449)
@@ -198,9 +198,10 @@
{
int res;
-// TODO rewrite this to get rid of the for (;;)
for (;;) {
- res = sync_callbacks_retrieve (sync_recovery_index, &sync_callbacks);
+ res = sync_callbacks_retrieve (sync_recovery_index,
+ &sync_callbacks);
+
/*
* No more service handlers have sync callbacks at this time
` */
@@ -418,7 +419,6 @@
log_printf (LOG_LEVEL_DEBUG,
"Committing synchronization for (%s)\n",
sync_callbacks.name);
-
}
/*
Index: exec/main.c
===================================================================
--- exec/main.c (revision 1446)
+++ exec/main.c (revision 1449)
@@ -175,15 +175,29 @@
static int openais_sync_callbacks_retrieve (int sync_id,
struct sync_callbacks *callbacks)
{
- if (ais_service[sync_id] == NULL) {
+ unsigned int ais_service_index;
+ unsigned int ais_services_found = 0;
+
+ for (ais_service_index = 0;
+ ais_service_index < SERVICE_HANDLER_MAXIMUM_COUNT;
+ ais_service_index++) {
+
+ if (ais_service[ais_service_index] != NULL) {
+ if (ais_services_found == sync_id) {
+ break;
+ }
+ ais_services_found += 1;
+ }
+ }
+ if (ais_service_index == SERVICE_HANDLER_MAXIMUM_COUNT) {
memset (callbacks, 0, sizeof (struct sync_callbacks));
return (-1);
}
- callbacks->name = ais_service[sync_id]->name;
- callbacks->sync_init = ais_service[sync_id]->sync_init;
- callbacks->sync_process = ais_service[sync_id]->sync_process;
- callbacks->sync_activate = ais_service[sync_id]->sync_activate;
- callbacks->sync_abort = ais_service[sync_id]->sync_abort;
+ callbacks->name = ais_service[ais_service_index]->name;
+ callbacks->sync_init = ais_service[ais_service_index]->sync_init;
+ callbacks->sync_process = ais_service[ais_service_index]->sync_process;
+ callbacks->sync_activate = ais_service[ais_service_index]->sync_activate;
+ callbacks->sync_abort = ais_service[ais_service_index]->sync_abort;
return (0);
}
revision-1450.patch:
Makefile | 10 ++++++++--
lcr_ifact.c | 43 +++++++++++++++++++++++++------------------
test.c | 4 ++--
3 files changed, 35 insertions(+), 22 deletions(-)
--- NEW FILE revision-1450.patch ---
Index: lcr/test.c
===================================================================
--- lcr/test.c (revision 1449)
+++ lcr/test.c (revision 1450)
@@ -87,7 +87,7 @@
(void *)0xaaaa1111);
assert (res == 0);
- a_iface_ver1 = (struct iface *)a_iface_ver0_p;
+ a_iface_ver1 = (struct iface *)a_iface_ver1_p;
res = lcr_ifact_reference (
&b_ifact_handle_ver1,
@@ -97,7 +97,7 @@
(void *)0xbbbb1111);
assert (res == 0);
- b_iface_ver1 = (struct iface *)b_iface_ver0_p;
+ b_iface_ver1 = (struct iface *)b_iface_ver1_p;
a_iface_ver0->func1();
a_iface_ver0->func2();
Index: lcr/lcr_ifact.c
===================================================================
--- lcr/lcr_ifact.c (revision 1449)
+++ lcr/lcr_ifact.c (revision 1450)
@@ -45,6 +45,7 @@
struct lcr_component_instance {
struct lcr_iface *ifaces;
int iface_count;
+ unsigned int comp_handle;
void *dl_handle;
int refcount;
char library_name[256];
@@ -68,7 +69,7 @@
.iterator = 0
};
-static unsigned int g_component_handle;
+static unsigned int g_component_handle = 0xFFFFFFFF;
#ifdef OPENAIS_LINUX
static int lcr_select_so (const struct dirent *dirent)
@@ -170,7 +171,6 @@
res = getcwd (cwd, sizeof (cwd));
if (res != NULL) {
- strcat (cwd, "/");
path_list[0] = strdup (cwd);
path_list_entries++;
}
@@ -291,6 +291,8 @@
}
dl_handle = dlopen (dl_name, RTLD_LAZY);
if (dl_handle == NULL) {
+ fprintf (stderr, "LCR error loading plugin: %s\n",
+ dlerror());
continue;
}
instance = lcr_comp_find (iface_name, version, iface_number);
@@ -301,8 +303,8 @@
}
/*
- * No matching interfaces found, try next shared object
- */
+ * No matching interfaces found, try next shared object
+ */
if (g_component_handle != 0xFFFFFFFF) {
hdb_handle_destroy (&lcr_component_instance_database,
g_component_handle);
@@ -349,20 +351,20 @@
// TODO error checking in this code is weak
/*
- * Find all *.lcrso files in search paths
+ * Search through all lcrso files for desired interface
*/
for (i = 0; i < path_list_entries; i++) {
- res = interface_find_and_load (
- path_list[i],
- iface_name,
- version,
- &instance,
- &iface_number);
+ res = interface_find_and_load (
+ path_list[i],
+ iface_name,
+ version,
+ &instance,
+ &iface_number);
- if (res == 0) {
- goto found;
+ if (res == 0) {
+ goto found;
+ }
}
- }
/*
* No matching interfaces found in all shared objects
@@ -379,9 +381,10 @@
iface_handle);
hdb_handle_get (&lcr_iface_instance_database,
*iface_handle, (void *)&iface_instance);
- iface_instance->component_handle = g_component_handle;
+ iface_instance->component_handle = instance->comp_handle;
iface_instance->context = context;
iface_instance->destructor = instance->ifaces[iface_number].destructor;
+ hdb_handle_put (&lcr_iface_instance_database, *iface_handle);
return (0);
}
@@ -408,17 +411,21 @@
void lcr_component_register (struct lcr_comp *comp)
{
struct lcr_component_instance *instance;
+ static unsigned int comp_handle;
hdb_handle_create (&lcr_component_instance_database,
sizeof (struct lcr_component_instance),
- &g_component_handle);
+ &comp_handle);
hdb_handle_get (&lcr_component_instance_database,
- g_component_handle, (void *)&instance);
+ comp_handle, (void *)&instance);
instance->ifaces = comp->ifaces;
instance->iface_count = comp->iface_count;
+ instance->comp_handle = comp_handle;
instance->dl_handle = NULL;
hdb_handle_put (&lcr_component_instance_database,
- g_component_handle);
+ comp_handle);
+
+ g_component_handle = comp_handle;
}
Index: lcr/Makefile
===================================================================
--- lcr/Makefile (revision 1449)
+++ lcr/Makefile (revision 1450)
@@ -27,7 +27,7 @@
include ../Makefile.inc
CFLAGS += -I../include
-LDFLAGS += -L./ ${DYFLAGS}
+override LDFLAGS += ${DYFLAGS}
ifeq (${OPENAIS_COMPAT}, LINUX)
LDFLAGS += -ldl
@@ -57,7 +57,7 @@
endif
test: test.o uis.o lcr_ifact.o
- $(CC) $(LDFLAGS) test.o lcr_ifact.o uis.o -lpthread -o test
+ $(CC) $(LDFLAGS) -fPIC test.o lcr_ifact.o uis.o -lpthread -o test
test_static: test.o libtest_a.o libtest_b.o uis.o lcr_ifact.o
$(CC) $(LDFLAGS) test.o libtest_a.o libtest_b.o lcr_ifact.o -o test_static
@@ -71,6 +71,12 @@
libtest_b.o: libtest_b.c
$(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
+lcr_ifact.o: lcr_ifact.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
+
+test.o: test.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) -fPIC -c -o $@ $(*F).c
+
clean:
rm -f test libtest.so* *.o uic liblcr.so* liblcr.a *.lcrso *.da *.ba *.bb *.bbg \
test_static
revision-1453.patch:
amfcomp.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
--- NEW FILE revision-1453.patch ---
Index: exec/amfcomp.c
===================================================================
--- exec/amfcomp.c (revision 1450)
+++ exec/amfcomp.c (revision 1453)
@@ -1129,11 +1129,14 @@
if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_RESTARTING) {
comp_presence_state_set (comp, SA_AMF_PRESENCE_INSTANTIATED);
- } else if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATING) {
+ } else
+ if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_INSTANTIATING) {
amf_comp_operational_state_set (comp, SA_AMF_OPERATIONAL_ENABLED);
comp_presence_state_set (comp, SA_AMF_PRESENCE_INSTANTIATED);
- }
- else {
+ } else
+ if (comp->saAmfCompPresenceState == SA_AMF_PRESENCE_UNINSTANTIATED) {
+ return SA_AIS_ERR_INVALID_PARAM;
+ } else {
assert (0);
}
revision-1455.patch:
totemsrp.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
--- NEW FILE revision-1455.patch ---
Index: exec/totemsrp.c
===================================================================
--- exec/totemsrp.c (revision 1453)
+++ exec/totemsrp.c (revision 1455)
@@ -1779,15 +1779,10 @@
/*
* Build regular configuration
*/
- instance->my_new_memb_entries = commit_token->addr_entries;
-
totemrrp_processor_count_set (
instance->totemrrp_handle,
commit_token->addr_entries);
- memcpy (instance->my_new_memb_list, addr,
- sizeof (struct srp_addr) * instance->my_new_memb_entries);
-
/*
* Build transitional configuration
*/
@@ -2598,6 +2593,11 @@
addr = (struct srp_addr *)commit_token->end_of_commit_token;
memb_list = (struct memb_commit_token_memb_entry *)(addr + commit_token->addr_entries);
+ memcpy (instance->my_new_memb_list, addr,
+ sizeof (struct srp_addr) * commit_token->addr_entries);
+
+ instance->my_new_memb_entries = commit_token->addr_entries;
+
memcpy (&memb_list[commit_token->memb_index].ring_id,
&instance->my_old_ring_id, sizeof (struct memb_ring_id));
assert (!totemip_zero_check(&instance->my_old_ring_id.rep));
revision-1464.patch:
timer.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
--- NEW FILE revision-1464.patch ---
Index: exec/timer.c
===================================================================
--- exec/timer.c (revision 1455)
+++ exec/timer.c (revision 1464)
@@ -177,7 +177,7 @@
int res;
int unlock;
- if (pthread_equal (pthread_self(), expiry_thread) == 0) {
+ if (pthread_equal (pthread_self(), expiry_thread) != 0) {
unlock = 0;
} else {
unlock = 1;
@@ -209,7 +209,7 @@
int res;
int unlock;
- if (pthread_equal (pthread_self(), expiry_thread) == 0) {
+ if (pthread_equal (pthread_self(), expiry_thread) != 0) {
unlock = 0;
} else {
unlock = 1;
Index: openais.spec
===================================================================
RCS file: /cvs/dist/rpms/openais/FC-6/openais.spec,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- openais.spec 28 Aug 2007 16:05:25 -0000 1.27
+++ openais.spec 2 Oct 2007 17:21:17 -0000 1.28
@@ -1,7 +1,7 @@
Name: openais
Summary: The openais Standards-Based Cluster Framework executive and APIs
Version: 0.80.3
-Release: 4%{?dist}
+Release: 6%{?dist}
License: BSD
Group: System Environment/Base
URL: http://developer.osdl.org/dev/openais/
@@ -12,6 +12,13 @@
Patch3: revision-1408.patch
Patch4: revision-1409.patch
Patch5: revision-1423.patch
+Patch6: revision-1426.patch
+Patch7: revision-1446.patch
+Patch8: revision-1449.patch
+Patch9: revision-1450.patch
+Patch9: revision-1453.patch
+Patch10: revision-1455.patch
+Patch11: revision-1464.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
ExclusiveArch: i386 ppc x86_64 ppc64 ia64 s390 s390x alpha
@@ -42,6 +49,12 @@
%patch3
%patch4
%patch5
+%patch6
+%patch7
+%patch8
+%patch9
+%patch10
+%patch11
%build
# -O3 required for performance reasons
@@ -180,6 +193,19 @@
%{_mandir}/man3/evs_membership_get.3*
%changelog
+* Tue Oct 2 2007 Steven Dake <sdake redhat com> - 0.80.3-6
+- Resolved: rhbz#314641
+- Add upstream revision 1464 - Fix schedule of timer within the same thread to prevent deadlock
+
+* Mon Sep 24 2007 Steven Dake <sdake redhat com> - 0.80.3-5
+- Resolves: rhbz#302341
+- Add upstream revision 1455 - Fix loss of node joins in commit state resulting in looping of membership protocol.
+- Add upstream revision 1453 - Fix assertion if component registration occurs during certain phases of instantation.
+- Add upstream revision 1450 - Fix reference counting in lcr code so that lcr_ifact_release works properly.
+- Add upstream revision 1449 - Allow missing services in synchronization to not cause a segfault.k
+- Add upstream revision 1446 - Remove inadvertant commit of changes to totemsrp which happened when security changes were patched in revision 1426.
+- Add upstream revision 1426 - Patch to log security warnings when invalid identifier is used in message header for a totem header.
+
* Tue Aug 28 2007 Steven Dake <sdake redhat com> - 0.80.3-4
- Resolves: rhbz#251082
- Add upstream revision 1423 - Fix synchronization defect resulting in segfault.
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]