[Openais] corosync trunk - fix /dev/shm file leak

Steven Dake sdake at redhat.com
Thu Jun 24 09:06:57 PDT 2010


On 06/24/2010 02:42 AM, Angus Salkeld wrote:
> On Thu, Jun 24, 2010 at 01:23:44AM -0700, Steven Dake wrote:
>> this fixes leaking of files in /dev/shm which happens if corosync is
>> started and stopped repeatedly.
>>
>
> Couple of suggestions inline.
>
>> Regards
>> -steve
>
>> Index: exec/logsys.c
>> ===================================================================
>> --- exec/logsys.c	(revision 2962)
>> +++ exec/logsys.c	(working copy)
>> @@ -225,6 +225,9 @@
>>   	int res;
>>   	const char *file = "fdata-XXXXXX";
>>   	char path[128];
>
> char path[MAX_PATH];
>
>> +	char buffer[128];
>> +	int i;
>> +	int written;
>>
>
> snprintf(MAX_PATH, ...)
>
>>   	sprintf (path, "/dev/shm/%s", file);
>>
>> @@ -237,10 +240,27 @@
>>   		}
>>   	}
>>
>> -	res = ftruncate (fd, bytes);
>> +	/*
>> +	 * ftruncate doesn't return ENOSPC
>> +	 * have to use write to determine if shared memory is actually available
>> +	 */
>> +	res = ftruncate (fd, 0);
>>   	if (res == -1) {
>
> unlink()
>
>>   		close (fd);
>>   	}
>> +	memset (buffer, 0, sizeof (buffer));
>> +	for (i = 0; i<  (bytes / 64); i++) {
>> +retry_write:
>> +		written = write (fd, buffer, 64);
>> +		if (written == -1&&  errno == EINTR) {
>> +			goto retry_write;
>> +		}
>> +		if (written != 64) {
>
> unlink()
>
>> +			return (-1);
>> +		}
>> +	}
>> +	
>> +	unlink (path);
>>
>>   	addr_orig = mmap (NULL, bytes<<  1, PROT_NONE,
>>   		MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
>
> Also don't we need to call munmap() when the second mmap() fails?
>
>
>> @@ -1011,6 +1031,7 @@
>>   int _logsys_rec_init (unsigned int fltsize)
>>   {
>>   	size_t flt_real_size;
>> +	int res;
>>
>>   	sem_init (&logsys_thread_start, 0, 0);
>>
>> @@ -1034,7 +1055,10 @@
>>
>>   	flt_real_size = ROUNDUP(fltsize, sysconf(_SC_PAGESIZE)) * 4;
>>
>> -	circular_memory_map ((void **)&flt_data, flt_real_size);
>> +	res = circular_memory_map ((void **)&flt_data, flt_real_size);
>> +	if (res == -1) {
>
> I know they are not "pshared" but it would be good to
> call
> sem_destroy() and pthread_spin_destroy()
> here.
>
>> +		return (-1);
>> +	}
>>
>>   	memset (flt_data, 0, flt_real_size * 2);
>>   	/*
>
>> _______________________________________________
>> Openais mailing list
>> Openais at lists.linux-foundation.org
>> https://lists.linux-foundation.org/mailman/listinfo/openais
>
> _______________________________________________
> Openais mailing list
> Openais at lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/openais
thanks for the review.

obviously written after being awake too long..

Regards
-steve


More information about the Openais mailing list