mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-08 03:00:36 +00:00
fix issue where pid file is accidentally truncated
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10493 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
3df4810b03
commit
482c6491ac
20
src/switch.c
20
src/switch.c
@ -253,7 +253,8 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
char pid_path[256] = ""; /* full path to the pid file */
|
char pid_path[256] = ""; /* full path to the pid file */
|
||||||
char pid_buffer[32] = ""; /* pid string */
|
char pid_buffer[32] = ""; /* pid string */
|
||||||
switch_size_t pid_len;
|
char old_pid_buffer[32] = ""; /* pid string */
|
||||||
|
switch_size_t pid_len, old_pid_len;
|
||||||
const char *err = NULL; /* error value for return from freeswitch initialization */
|
const char *err = NULL; /* error value for return from freeswitch initialization */
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
int nf = 0; /* TRUE if we are running in nofork mode */
|
int nf = 0; /* TRUE if we are running in nofork mode */
|
||||||
@ -603,6 +604,21 @@ int main(int argc, char *argv[])
|
|||||||
pid_len = strlen(pid_buffer);
|
pid_len = strlen(pid_buffer);
|
||||||
|
|
||||||
apr_pool_create(&pool, NULL);
|
apr_pool_create(&pool, NULL);
|
||||||
|
|
||||||
|
|
||||||
|
if (switch_file_open(&fd,
|
||||||
|
pid_path,
|
||||||
|
SWITCH_FOPEN_READ,
|
||||||
|
SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE,
|
||||||
|
pool) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
fprintf(stderr, "Cannot open pid file %s.\n", pid_path);
|
||||||
|
return 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
old_pid_len = sizeof(old_pid_buffer);
|
||||||
|
switch_file_read(fd, old_pid_buffer, &old_pid_len);
|
||||||
|
switch_file_close(fd);
|
||||||
|
|
||||||
if (switch_file_open(&fd,
|
if (switch_file_open(&fd,
|
||||||
pid_path,
|
pid_path,
|
||||||
SWITCH_FOPEN_WRITE | SWITCH_FOPEN_CREATE | SWITCH_FOPEN_TRUNCATE,
|
SWITCH_FOPEN_WRITE | SWITCH_FOPEN_CREATE | SWITCH_FOPEN_TRUNCATE,
|
||||||
@ -614,6 +630,8 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (switch_file_lock(fd, SWITCH_FLOCK_EXCLUSIVE | SWITCH_FLOCK_NONBLOCK) != SWITCH_STATUS_SUCCESS) {
|
if (switch_file_lock(fd, SWITCH_FLOCK_EXCLUSIVE | SWITCH_FLOCK_NONBLOCK) != SWITCH_STATUS_SUCCESS) {
|
||||||
fprintf(stderr, "Cannot lock pid file %s.\n", pid_path);
|
fprintf(stderr, "Cannot lock pid file %s.\n", pid_path);
|
||||||
|
old_pid_len = strlen(old_pid_buffer);
|
||||||
|
switch_file_write(fd, old_pid_buffer, &old_pid_len);
|
||||||
return 255;
|
return 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user