I think I just might have finally found the bug that occasionally causes
"subscribe" to trash a Majordomo-managed mailing list by partially
overwriting existing addresses, rather than appending the new one to
the end.
&do_subscribe calls &is_list_member to see if someone is already a
member of the list before appending them again. To keep another Majordomo
process from modifying the list while this is in progress, &do_subscribe
locks and opens the list file for appending before calling &is_list_member.
Well, turns out &is_list_member happened to be using the same filehandle
("LIST") as &do_subscribe, and I'd neglected to make it local to
&is_list_member... Oops.
Here's the patch to majordomo.pl. Give this a try, and let me know if
you still see the overwrite problem after you've applied the patch.
-Brent
--
Brent Chapman Great Circle Associates
Brent@GreatCircle.COM 1057 West Dana Street
+1 415 962 0841 Mountain View, CA 94041
*** /tmp/T0a16480 Mon Nov 15 14:03:54 1993
--- majordomo.pl Mon Nov 15 13:56:29 1993
***************
*** 1,12 ****
# General subroutines for Majordomo
# $Source: /mycroft/brent/majordomo/RCS/majordomo.pl,v $
! # $Revision: 1.20 $
! # $Date: 1993/08/31 00:36:46 $
# $Author: brent $
# $State: Exp $
#
! # $Header: /mycroft/brent/majordomo/RCS/majordomo.pl,v 1.20 1993/08/31 00:36:46 brent Exp $
#
# $Locker: $
#
--- 1,12 ----
# General subroutines for Majordomo
# $Source: /mycroft/brent/majordomo/RCS/majordomo.pl,v $
! # $Revision: 1.21 $
! # $Date: 1993/11/15 21:55:38 $
# $Author: brent $
# $State: Exp $
#
! # $Header: /mycroft/brent/majordomo/RCS/majordomo.pl,v 1.21 1993/11/15 21:55:38 brent Exp $
#
# $Locker: $
#
***************
*** 374,379 ****
--- 374,380 ----
local($listdir) = shift;
local($clean_list) = shift;
local($matches);
+ local(*LIST);
open(LIST, "$listdir/$clean_list")
|| &main'abort("Can't read $listdir/$clean_list: $!");
|
|