You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jo...@apache.org on 2007/04/02 18:00:18 UTC
svn commit: r524821 - /apr/apr/trunk/test/testfile.c
Author: jorton
Date: Mon Apr 2 09:00:14 2007
New Revision: 524821
URL: http://svn.apache.org/viewvc?view=rev&rev=524821
Log:
* test/testfile.c (test_gets_buffered): Regression test for
apr_file_gets() deadlock.
Modified:
apr/apr/trunk/test/testfile.c
Modified: apr/apr/trunk/test/testfile.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/test/testfile.c?view=diff&rev=524821&r1=524820&r2=524821
==============================================================================
--- apr/apr/trunk/test/testfile.c (original)
+++ apr/apr/trunk/test/testfile.c Mon Apr 2 09:00:14 2007
@@ -415,6 +415,29 @@
apr_file_close(f);
}
+static void test_gets_buffered(abts_case *tc, void *data)
+{
+ apr_file_t *f = NULL;
+ apr_status_t rv;
+ char *str = apr_palloc(p, 256);
+
+ /* This will deadlock gets before the r524355 fix. */
+ rv = apr_file_open(&f, FILENAME, APR_READ|APR_BUFFERED|APR_XTHREAD, 0, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+ rv = apr_file_gets(str, 256, f);
+ /* Only one line in the test file, so APR will encounter EOF on the first
+ * call to gets, but we should get APR_SUCCESS on this call and
+ * APR_EOF on the next.
+ */
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ ABTS_STR_EQUAL(tc, TESTSTR, str);
+ rv = apr_file_gets(str, 256, f);
+ ABTS_INT_EQUAL(tc, APR_EOF, rv);
+ ABTS_STR_EQUAL(tc, "", str);
+ apr_file_close(f);
+}
+
static void test_bigread(abts_case *tc, void *data)
{
apr_file_t *f = NULL;
@@ -913,6 +936,7 @@
abts_run_test(suite, test_getc, NULL);
abts_run_test(suite, test_ungetc, NULL);
abts_run_test(suite, test_gets, NULL);
+ abts_run_test(suite, test_gets_buffered, NULL);
abts_run_test(suite, test_puts, NULL);
abts_run_test(suite, test_writev, NULL);
abts_run_test(suite, test_writev_full, NULL);