]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Call safe_sendfile() only with sockets, and also with files under Linux.
authorTimo Sirainen <tss@iki.fi>
Wed, 9 Apr 2003 20:28:30 +0000 (23:28 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 9 Apr 2003 20:28:30 +0000 (23:28 +0300)
Hopefully helps for signal 12 under FreeBSD.

--HG--
branch : HEAD

src/lib/ostream-file.c
src/lib/sendfile-util.c

index 7ea288314a75f5735db5a51c7b87532781eb5e6f..4b7a4741858126aac6dc7aaac7c61d4e4328a254 100644 (file)
@@ -876,6 +876,15 @@ o_stream_create_file(int fd, pool_t pool, size_t max_buffer_size,
                        fstream->optimal_block_size =
                                I_MIN(st.st_blksize, MAX_OPTIMAL_BLOCK_SIZE);
                }
+#ifndef HAVE_LINUX_SENDFILE
+               /* only Linux supports sendfile() with non-sockets. Other
+                  systems fail more or less gracefully if it's tried, so
+                  don't bother to even try with them. */
+               fstream->no_sendfile = TRUE;
+#endif
+       } else {
+               if (net_getsockname(fd, NULL, NULL) < 0)
+                       fstream->no_sendfile = TRUE;
        }
        return ostream;
 }
index 4ca4ff181756f3661ea22310855ca20c503c5a43..995337bff54ee531ed9777bb06570d12b87e7125 100644 (file)
@@ -92,12 +92,8 @@ ssize_t safe_sendfile(int out_fd, int in_fd, uoff_t *offset, size_t count)
 
        i_assert(count <= SSIZE_T_MAX);
 
-       /* outfd must be socket, or at least some Solaris versions will
+       /* NOTE: if outfd is not a socket, some Solaris versions will
           kernel panic */
-       if (net_getsockname(out_fd, NULL, NULL) < 0) {
-               errno = EINVAL;
-               return -1;
-       }
 
        vec.sfv_fd = in_fd;
        vec.sfv_flag = 0;