dma(8): Fix race condition in multi-recipient delivery

Simon 'corecode' Schubert corecode at
Fri Jul 10 01:50:47 PDT 2009

Matthew Dillon wrote:
    dup() doesn't solve the problem.  A dup()'d descriptor still
    points to a common file pointer and thus a common seek position.
    Only open() will generate a new file pointer backing the file
That's not true.

  <3 the future  +++  RENT this banner advert  +++   ASCII Ribbon   /"\
  rock the past  +++  space for low CHF NOW!1  +++     Campaign     \ /
Party Enjoy Relax   |      Against  HTML   \
Dude 2c 2 the max   !       Mail + News   / \
#include <stdio.h>

	FILE *f = fopen("duptmp", "w");
	FILE *f1, *f2;
	char line[100];

	if (f == NULL)
		return (1);

	fputs("1\n2\n3\n", f);

	f1 = fopen("duptmp", "r");
	if (f1 == NULL)
		return (1);
	f2 = fdopen(dup(fileno(f1)), "r");
	if (f2 == NULL)
		return (2);
	fgets(line, sizeof(line), f1);
	printf("read1: %s", line);
	fgets(line, sizeof(line), f2);
	printf("read2: %s", line);
	return (0);

More information about the Submit mailing list