[asterisk-users] click to call with php
A J Stiles
asterisk_list at earthshod.co.uk
Fri May 20 04:19:47 CDT 2011
On Friday 20 May 2011, Dovid Bender wrote:
> I had issue with call files. They would lock up the system (this was 5
> years ago so maybe things have changed.....)
Whenever you open a file for writing, a link is created in the containing
folder's directory (which says where on the disk the file is located)
pretty much straight away -- so other processes can see the file. And files
are written to disk, not one character at a time, but in blocks whose size
depends on the filesystem, one full block at a time. The last block may well
be incomplete, and so contain junk after the file proper; but the directory
entry gives the actual file size, so the junk can be ignored.#
This creates a race condition: Asterisk may try to parse a call file which is
still in an incomplete state (empty or just the first block of several),
and get its knickers in a twist.
The *proper* way to avoid this situation, is to create the call file in a
temporary location first; then `mv` it to the /var/spool/asterisk/outgoing/
folder. Moving a file within a filesystem just entails putting a new link in
the destination folder's directory, and removing the one from the old
directory. Moving a file across filesystems entails a copy operation; but
either way, the important thing is that *the link to the destination file
won't be placed in the folder's directory until the data is actually there*.
The *bodgy* way to avoid this situation, is to make sure the file is smaller
than one logical block on the filesystem where .../outgoing/ resides; turn
off buffer autoflushing in the scripting language; and cross your fingers
that the file will already be complete in the cache when the directory is
updated. And even if it works on your system today, you might find that an
upgrade to Asterisk, your scripting language, whatever invoked the script,
the filesystem driver in the kernel, or even a change in RAM or disk usage on
your server, breaks it tomorrow.
--
AJS
Answers come *after* questions.
More information about the asterisk-users
mailing list