List:Commits« Previous MessageNext Message »
From:Daniel Fischer Date:November 24 2006 2:36pm
Subject:bk commit into 4.1 tree (df:1.2555)
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of df. When df does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-11-24 15:36:04+01:00, df@stripped +1 -0
  fixes for mtr_unique.pl

  mysql-test/lib/mtr_unique.pl@stripped, 2006-11-24 15:36:03+01:00, df@stripped +40 -3
    - add info message to mtr_require_unique_id_and_wait as suggested
    - fix for security issue
    - locks for pids of processes that don't exist anymore are reused, if ps is present and working as expected

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	df
# Host:	kahlann.erinye.com
# Root:	/home/df/mysql/build/mysql-4.1-build-work

--- 1.1/mysql-test/lib/mtr_unique.pl	2006-11-17 16:52:19 +01:00
+++ 1.2/mysql-test/lib/mtr_unique.pl	2006-11-24 15:36:03 +01:00
@@ -35,6 +35,13 @@ sub mtr_require_unique_id($$$) {
 	my $min = shift;
 	my $max = shift;
 	my $ret = undef;
+	my $changed = 0;
+
+	my $can_use_ps = `ps -e | grep '^[ ]*$$ '`;
+
+	if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
+		die 'lock file is a symbolic link';
+	}
 
 	chmod 0777, "$file.sem";
 	open SEM, ">", "$file.sem" or die "can't write to $file.sem";
@@ -43,6 +50,11 @@ sub mtr_require_unique_id($$$) {
 		open FILE, ">", $file or die "can't create $file";
 		close FILE;
 	}
+
+	if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
+		die 'lock file is a symbolic link';
+	}
+
 	chmod 0777, $file;
 	open FILE, "+<", $file or die "can't open $file";
 	select undef,undef,undef,0.2;
@@ -52,15 +64,30 @@ sub mtr_require_unique_id($$$) {
 		chomp;
 		my ($id, $pid) = split / /;
 		$taken{$id} = $pid;
+		if($can_use_ps) {
+			my $res = `ps -e | grep '^[ ]*$pid '`;
+			if(!$res) {
+				print "Ignoring slot $id used by missing process $pid.\n";
+				delete $taken{$id};
+				++$changed;
+			}
+		}
 	}
-	seek FILE, 0, 2;
 	for(my $i=$min; $i<=$max; ++$i) {
 		if(! exists $taken{$i}) {
-			print FILE "$i $$\n";
 			$ret = $i;
+			$taken{$i} = $$;
+			++$changed;
 			last;
 		}
 	}
+	if($changed) {
+		seek FILE, 0, 0;
+		truncate FILE, 0 or die "can't truncate $file";
+		for my $k (keys %taken) {
+			print FILE $k . ' ' . $taken{$k} . "\n";
+		}
+	}
 	close FILE;
 	flock SEM, LOCK_UN or warn "can't unlock $file.sem";
 	close SEM;
@@ -75,8 +102,9 @@ sub mtr_require_unique_id($$$) {
 sub mtr_require_unique_id_and_wait($$$) {
 	my $ret = mtr_require_unique_id($_[0],$_[1],$_[2]);
 	while(! defined $ret) {
-		sleep 10;
+		sleep 30;
 		$ret = mtr_require_unique_id($_[0],$_[1],$_[2]);
+		print "Waiting for unique id to become available...\n" unless $ret;
 	}
 	return $ret;
 }
@@ -88,8 +116,17 @@ sub mtr_release_unique_id($$) {
 	my $file = shift;
 	my $myid = shift;
 
+	if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
+		die 'lock file is a symbolic link';
+	}
+
 	open SEM, ">", "$file.sem" or die "can't write to $file.sem";
 	flock SEM, LOCK_EX or die "can't lock $file.sem";
+
+	if(eval("readlink '$file'") || eval("readlink '$file.sem'")) {
+		die 'lock file is a symbolic link';
+	}
+
 	if(! -e $file) {
 		open FILE, ">", $file or die "can't create $file";
 		close FILE;
Thread
bk commit into 4.1 tree (df:1.2555)Daniel Fischer24 Nov