send-email: make message-id generation a bit more robust
Earlier code took Unix time and appended a few random digits. If you are firing off many messages within a second, you could issue the same id to different messages, which is a no-no. If you send out 31 messages within a single second, with random integer taken out of rand(4200), you have about 10% chance of producing the same message ID. This fixes the problem by uses a prefix string which is constant-per-invocation (time and pid), with a serial number for each message generated by the process appended at the end. Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									d7416ecac8
								
							
						
					
					
						commit
						be510cfef3
					
				|  | @ -437,10 +437,17 @@ sub extract_valid_address { | |||
|  | ||||
| # We'll setup a template for the message id, using the "from" address: | ||||
|  | ||||
| my ($message_id_stamp, $message_id_serial); | ||||
| sub make_message_id | ||||
| { | ||||
| 	my $date = time; | ||||
| 	my $pseudo_rand = int (rand(4200)); | ||||
| 	my $uniq; | ||||
| 	if (!defined $message_id_stamp) { | ||||
| 		$message_id_stamp = sprintf("%s-%s", time, $$); | ||||
| 		$message_id_serial = 0; | ||||
| 	} | ||||
| 	$message_id_serial++; | ||||
| 	$uniq = "$message_id_stamp-$message_id_serial"; | ||||
|  | ||||
| 	my $du_part; | ||||
| 	for ($sender, $repocommitter, $repoauthor) { | ||||
| 		$du_part = extract_valid_address(sanitize_address($_)); | ||||
|  | @ -450,8 +457,8 @@ sub make_message_id | |||
| 		use Sys::Hostname qw(); | ||||
| 		$du_part = 'user@' . Sys::Hostname::hostname(); | ||||
| 	} | ||||
| 	my $message_id_template = "<%s-git-send-email-$du_part>"; | ||||
| 	$message_id = sprintf $message_id_template, "$date$pseudo_rand"; | ||||
| 	my $message_id_template = "<%s-git-send-email-%s>"; | ||||
| 	$message_id = sprintf($message_id_template, $uniq, $du_part); | ||||
| 	#print "new message id = $message_id\n"; # Was useful for debugging | ||||
| } | ||||
|  | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano