You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by mi...@apache.org on 2016/03/25 02:28:13 UTC
svn commit: r1736523 - in /apr/apr/branches/1.6.x: ./ CHANGES
file_io/netware/pipe.c file_io/os2/pipe.c file_io/unix/pipe.c
file_io/win32/pipe.c include/apr_file_io.h test/testpipe.c
Author: minfrin
Date: Fri Mar 25 01:28:13 2016
New Revision: 1736523
URL: http://svn.apache.org/viewvc?rev=1736523&view=rev
Log:
Backport 1734816:
apr_file_io: Add apr_file_pipe_create_pools() allowing a pair of
pipes to be created, each in a different pool.
Modified:
apr/apr/branches/1.6.x/ (props changed)
apr/apr/branches/1.6.x/CHANGES
apr/apr/branches/1.6.x/file_io/netware/pipe.c
apr/apr/branches/1.6.x/file_io/os2/pipe.c
apr/apr/branches/1.6.x/file_io/unix/pipe.c
apr/apr/branches/1.6.x/file_io/win32/pipe.c
apr/apr/branches/1.6.x/include/apr_file_io.h
apr/apr/branches/1.6.x/test/testpipe.c
Propchange: apr/apr/branches/1.6.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 25 01:28:13 2016
@@ -1,4 +1,4 @@
/apr/apr/branches/1.4.x:1003369,1101301
-/apr/apr/trunk:733052,739635,741862,741866-741867,741869,741871,745763-745764,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892435,892909,896382,896653,899905,902090,908427,910419,910597,917819,917837-917838,925965,929796,930508,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438957-1438959,1442903,144956
8,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,1470186,1470348,1475509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,1611193,1611466,1611515,1611517,1625173,1626564,163
4615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594
+/apr/apr/trunk:733052,739635,741862,741866-741867,741869,741871,745763-745764,746310,747990,748080,748361,748371,748565,748888,748902,748988,749810,760443,767895,775683,782838,783398,783958,784633,784773,788588,789050,793192-793193,794118,794485,795267,799497,800627,809745,809854,810472,811455,813063,821306,829490,831641,832904,835607,888669,892028,892159,892435,892909,896382,896653,899905,902090,908427,910419,910597,917819,917837-917838,925965,929796,930508,931973,951771,960665,960671,979891,983618,989450,990435,1003338,1044440,1044447,1055657,1072165,1078845,1081462,1081495,1083038,1083242,1084662,1086695,1088023,1089031,1089129,1089438,1099348,1103310,1183683,1183685-1183686,1183688,1183693,1183698,1213382,1235047,1236970,1237078,1237507,1240472,1340286,1340288,1340470,1341193,1341196,1343233,1343243,1367050,1368819,1370494,1372018,1372022,1372093,1372849,1376957,1384764,1389077,1400200,1402868,1405985,1406690,1420106,1420109,1425356,1428809,1438940,1438957-1438959,1442903,144956
8,1456418,1459994,1460179-1460180,1460241,1460399,1460405,1462738,1462813,1470186,1470348,1475509,1478905,1480067,1481262,1481265,1484271,1487796,1489517,1496407,1502804,1510354,1516261,1523384,1523479,1523484,1523505,1523521,1523604,1523613,1523615,1523844-1523845,1523853,1524014,1524031,1528797,1528809,1529488,1529495,1529515,1529521,1529668,1530786,1530800,1530988,1531554,1531768,1531884,1532022,1533104,1533111,1533979,1535027,1535157,1536744,1538171,1539374,1539389,1539455,1539603,1541054,1541061,1541486,1541655,1541666,1541744,1542601,1542779,1543033,1543056,1548575,1550907,1551650,1551659,1558905,1559382,1559873,1559975,1561040,1561260,1561265,1561321,1561347,1561356,1561361,1561394,1561555,1571894,1575509,1578420,1587045,1587063,1587543,1587545,1588878,1588937,1593611,1593614-1593615,1593680,1594684,1594708,1595549,1597797,1597803,1604590,1604596,1604598,1605104,1610854,1611023,1611107,1611110,1611117,1611120,1611125,1611184,1611193,1611466,1611515,1611517,1625173,1626564,163
4615,1642159,1648830,1664406,1664447,1664451,1664471,1664769-1664770,1664775,1664904,1664911,1664958,1666341,1666411,1666458,1666611,1667420-1667421,1667423,1667900-1667901,1667903,1667914-1667916,1667962,1669077,1671292,1671329,1671356,1671389,1671513-1671514,1671957,1672354,1672366,1672495,1672575,1675644,1675656,1675668,1676013,1685929,1696140,1696767,1722547,1722557,1726928,1727020,1727160,1727175,1727199,1728957,1732582,1733451,1733594,1734816
/apr/apr/trunk/test/testnames.c:1460405
/httpd/httpd/trunk:1604590
Modified: apr/apr/branches/1.6.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/CHANGES?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/CHANGES [utf-8] (original)
+++ apr/apr/branches/1.6.x/CHANGES [utf-8] Fri Mar 25 01:28:13 2016
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes for APR 1.6.0
+ *) apr_file_io: Add apr_file_pipe_create_pools() allowing a pair of
+ pipes to be created, each in a different pool. [Graham Leggett]
+
*) Add apr_pollcb_wakeup(), with similar behavior to
apr_pollset_wakeup(). Add apr_pollcb_method_name(), with similar
behavior to apr_pollset_method_name().
Modified: apr/apr/branches/1.6.x/file_io/netware/pipe.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/file_io/netware/pipe.c?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/file_io/netware/pipe.c (original)
+++ apr/apr/branches/1.6.x/file_io/netware/pipe.c Fri Mar 25 01:28:13 2016
@@ -133,7 +133,8 @@ APR_DECLARE(apr_status_t) apr_os_pipe_pu
return apr_os_pipe_put_ex(file, thefile, 0, pool);
}
-APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *pool)
+static apr_status_t file_pipe_create(apr_file_t **in, apr_file_t **out,
+ apr_pool_t *pool_in, apr_pool_t *pool_out)
{
int filedes[2];
@@ -141,11 +142,11 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return errno;
}
- (*in) = (apr_file_t *)apr_pcalloc(pool, sizeof(apr_file_t));
- (*out) = (apr_file_t *)apr_pcalloc(pool, sizeof(apr_file_t));
+ (*in) = (apr_file_t *)apr_pcalloc(pool_in, sizeof(apr_file_t));
+ (*out) = (apr_file_t *)apr_pcalloc(pool_out, sizeof(apr_file_t));
- (*in)->pool =
- (*out)->pool = pool;
+ (*in)->pool = pool_in;
+ (*out)->pool = pool_out;
(*in)->filedes = filedes[0];
(*out)->filedes = filedes[1];
(*in)->flags = APR_INHERIT;
@@ -163,8 +164,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
(*in)->ungetchar = -1;
(*in)->thlock =
(*out)->thlock = NULL;
- (void) apr_pollset_create(&(*in)->pollset, 1, pool, 0);
- (void) apr_pollset_create(&(*out)->pollset, 1, pool, 0);
+ (void) apr_pollset_create(&(*in)->pollset, 1, pool_in, 0);
+ (void) apr_pollset_create(&(*out)->pollset, 1, pool_out, 0);
apr_pool_cleanup_register((*in)->pool, (void *)(*in), apr_unix_file_cleanup,
apr_pool_cleanup_null);
@@ -174,6 +175,30 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return APR_SUCCESS;
}
+static void file_pipe_block(apr_file_t **in, apr_file_t **out,
+ apr_int32_t blocking)
+{
+ switch (blocking) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_READ_BLOCK:
+ apr_file_pipe_timeout_set(*out, 0);
+ break;
+ case APR_WRITE_BLOCK:
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(*out, 0);
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ }
+}
+
+APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *pool)
+{
+ return file_pipe_create(in, out, pool, pool);
+}
+
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
apr_file_t **out,
apr_int32_t blocking,
@@ -181,23 +206,26 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
{
apr_status_t status;
- if ((status = apr_file_pipe_create(in, out, pool)) != APR_SUCCESS)
+ if ((status = file_pipe_create(in, out, pool, pool)) != APR_SUCCESS) {
return status;
+ }
- switch (blocking) {
- case APR_FULL_BLOCK:
- break;
- case APR_READ_BLOCK:
- apr_file_pipe_timeout_set(*out, 0);
- break;
- case APR_WRITE_BLOCK:
- apr_file_pipe_timeout_set(*in, 0);
- break;
- default:
- apr_file_pipe_timeout_set(*out, 0);
- apr_file_pipe_timeout_set(*in, 0);
+ file_pipe_block(in, out, blocking);
+
+ return APR_SUCCESS;
+}
+
+APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
+ apr_file_t **out, apr_int32_t blocking, apr_pool_t *pool_in, apr_pool_t *pool_out)
+{
+ apr_status_t status;
+
+ if ((status = file_pipe_create(in, out, pool_in, pool_out)) != APR_SUCCESS) {
+ return status;
}
+ file_pipe_block(in, out, blocking);
+
return APR_SUCCESS;
}
Modified: apr/apr/branches/1.6.x/file_io/os2/pipe.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/file_io/os2/pipe.c?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/file_io/os2/pipe.c (original)
+++ apr/apr/branches/1.6.x/file_io/os2/pipe.c Fri Mar 25 01:28:13 2016
@@ -24,7 +24,8 @@
#include <string.h>
#include <process.h>
-APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *pool)
+static apr_status_t file_pipe_create(apr_file_t **in, apr_file_t **out,
+ apr_pool_t *pool_in, apr_pool_t *pool_out)
{
ULONG filedes[2];
ULONG rc, action;
@@ -54,7 +55,7 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return APR_FROM_OS_ERROR(rc);
}
- (*in) = (apr_file_t *)apr_palloc(pool, sizeof(apr_file_t));
+ (*in) = (apr_file_t *)apr_palloc(pool_in, sizeof(apr_file_t));
rc = DosCreateEventSem(NULL, &(*in)->pipeSem, DC_SEM_SHARED, FALSE);
if (rc) {
@@ -76,33 +77,59 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return APR_FROM_OS_ERROR(rc);
}
- (*in)->pool = pool;
+ (*in)->pool = pool_in;
(*in)->filedes = filedes[0];
- (*in)->fname = apr_pstrdup(pool, pipename);
+ (*in)->fname = apr_pstrdup(pool_in, pipename);
(*in)->isopen = TRUE;
(*in)->buffered = FALSE;
(*in)->flags = 0;
(*in)->pipe = 1;
(*in)->timeout = -1;
(*in)->blocking = BLK_ON;
- apr_pool_cleanup_register(pool, *in, apr_file_cleanup, apr_pool_cleanup_null);
+ apr_pool_cleanup_register(pool_in, *in, apr_file_cleanup,
+ apr_pool_cleanup_null);
- (*out) = (apr_file_t *)apr_palloc(pool, sizeof(apr_file_t));
- (*out)->pool = pool;
+ (*out) = (apr_file_t *)apr_palloc(pool_out, sizeof(apr_file_t));
+ (*out)->pool = pool_out;
(*out)->filedes = filedes[1];
- (*out)->fname = apr_pstrdup(pool, pipename);
+ (*out)->fname = apr_pstrdup(pool_out, pipename);
(*out)->isopen = TRUE;
(*out)->buffered = FALSE;
(*out)->flags = 0;
(*out)->pipe = 1;
(*out)->timeout = -1;
(*out)->blocking = BLK_ON;
- apr_pool_cleanup_register(pool, *out, apr_file_cleanup, apr_pool_cleanup_null);
+ apr_pool_cleanup_register(pool_out, *out, apr_file_cleanup,
+ apr_pool_cleanup_null);
return APR_SUCCESS;
}
+static void file_pipe_block(apr_file_t **in, apr_file_t **out,
+ apr_int32_t blocking)
+{
+ switch (blocking) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_READ_BLOCK:
+ apr_file_pipe_timeout_set(*out, 0);
+ break;
+ case APR_WRITE_BLOCK:
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(*out, 0);
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ }
+}
+APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in,
+ apr_file_t **out,
+ apr_pool_t *pool)
+{
+ return file_pipe_create(in, out, pool, pool);
+}
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
apr_file_t **out,
@@ -111,26 +138,29 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
{
apr_status_t status;
- if ((status = apr_file_pipe_create(in, out, pool)) != APR_SUCCESS)
+ if ((status = file_pipe_create(in, out, pool, pool)) != APR_SUCCESS)
return status;
- switch (blocking) {
- case APR_FULL_BLOCK:
- break;
- case APR_READ_BLOCK:
- apr_file_pipe_timeout_set(*out, 0);
- break;
- case APR_WRITE_BLOCK:
- apr_file_pipe_timeout_set(*in, 0);
- break;
- default:
- apr_file_pipe_timeout_set(*out, 0);
- apr_file_pipe_timeout_set(*in, 0);
- }
+ file_pipe_block(in, out, blocking);
return APR_SUCCESS;
}
+APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
+ apr_file_t **out,
+ apr_int32_t blocking,
+ apr_pool_t *pool_in,
+ apr_pool_t *pool_out)
+{
+ apr_status_t status;
+
+ if ((status = file_pipe_create(in, out, pool_in, pool_out)) != APR_SUCCESS)
+ return status;
+
+ file_pipe_block(in, out, blocking);
+
+ return APR_SUCCESS;
+}
APR_DECLARE(apr_status_t) apr_file_namedpipe_create(const char *filename, apr_fileperms_t perm, apr_pool_t *pool)
Modified: apr/apr/branches/1.6.x/file_io/unix/pipe.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/file_io/unix/pipe.c?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/file_io/unix/pipe.c (original)
+++ apr/apr/branches/1.6.x/file_io/unix/pipe.c Fri Mar 25 01:28:13 2016
@@ -176,7 +176,8 @@ APR_DECLARE(apr_status_t) apr_os_pipe_pu
return apr_os_pipe_put_ex(file, thefile, 0, pool);
}
-APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *pool)
+static apr_status_t file_pipe_create(apr_file_t **in, apr_file_t **out,
+ apr_pool_t *pool_in, apr_pool_t *pool_out)
{
int filedes[2];
@@ -184,8 +185,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return errno;
}
- (*in) = (apr_file_t *)apr_pcalloc(pool, sizeof(apr_file_t));
- (*in)->pool = pool;
+ (*in) = (apr_file_t *)apr_pcalloc(pool_in, sizeof(apr_file_t));
+ (*in)->pool = pool_in;
(*in)->filedes = filedes[0];
(*in)->is_pipe = 1;
(*in)->fname = NULL;
@@ -200,8 +201,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
#ifndef WAITIO_USES_POLL
(*in)->pollset = NULL;
#endif
- (*out) = (apr_file_t *)apr_pcalloc(pool, sizeof(apr_file_t));
- (*out)->pool = pool;
+ (*out) = (apr_file_t *)apr_pcalloc(pool_out, sizeof(apr_file_t));
+ (*out)->pool = pool_out;
(*out)->filedes = filedes[1];
(*out)->is_pipe = 1;
(*out)->fname = NULL;
@@ -222,6 +223,30 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
return APR_SUCCESS;
}
+static void file_pipe_block(apr_file_t **in, apr_file_t **out, apr_int32_t blocking)
+{
+ switch (blocking) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_READ_BLOCK:
+ apr_file_pipe_timeout_set(*out, 0);
+ break;
+ case APR_WRITE_BLOCK:
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(*out, 0);
+ apr_file_pipe_timeout_set(*in, 0);
+ break;
+ }
+}
+
+APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in,
+ apr_file_t **out, apr_pool_t *pool)
+{
+ return file_pipe_create(in, out, pool, pool);
+}
+
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
apr_file_t **out,
apr_int32_t blocking,
@@ -229,23 +254,26 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
{
apr_status_t status;
- if ((status = apr_file_pipe_create(in, out, pool)) != APR_SUCCESS)
+ if ((status = file_pipe_create(in, out, pool, pool)) != APR_SUCCESS) {
return status;
+ }
- switch (blocking) {
- case APR_FULL_BLOCK:
- break;
- case APR_READ_BLOCK:
- apr_file_pipe_timeout_set(*out, 0);
- break;
- case APR_WRITE_BLOCK:
- apr_file_pipe_timeout_set(*in, 0);
- break;
- default:
- apr_file_pipe_timeout_set(*out, 0);
- apr_file_pipe_timeout_set(*in, 0);
+ file_pipe_block(in, out, blocking);
+
+ return APR_SUCCESS;
+}
+
+APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
+ apr_file_t **out, apr_int32_t blocking, apr_pool_t *pool_in, apr_pool_t *pool_out)
+{
+ apr_status_t status;
+
+ if ((status = file_pipe_create(in, out, pool_in, pool_out)) != APR_SUCCESS) {
+ return status;
}
+ file_pipe_block(in, out, blocking);
+
return APR_SUCCESS;
}
Modified: apr/apr/branches/1.6.x/file_io/win32/pipe.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/file_io/win32/pipe.c?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/file_io/win32/pipe.c (original)
+++ apr/apr/branches/1.6.x/file_io/win32/pipe.c Fri Mar 25 01:28:13 2016
@@ -68,7 +68,7 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
apr_pool_t *p)
{
/* Unix creates full blocking pipes. */
- return apr_file_pipe_create_ex(in, out, APR_FULL_BLOCK, p);
+ return apr_file_pipe_create_pools(in, out, APR_FULL_BLOCK, p, p);
}
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
@@ -76,6 +76,15 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
apr_int32_t blocking,
apr_pool_t *p)
{
+ return apr_file_pipe_create_pools(in, out, APR_FULL_BLOCK, p, p);
+}
+
+APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
+ apr_file_t **out,
+ apr_int32_t blocking,
+ apr_pool_t *pool_in,
+ apr_pool_t *pool_out)
+{
#ifdef _WIN32_WCE
return APR_ENOTIMPL;
#else
@@ -96,8 +105,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
#endif
sa.lpSecurityDescriptor = NULL;
- (*in) = (apr_file_t *)apr_pcalloc(p, sizeof(apr_file_t));
- (*in)->pool = p;
+ (*in) = (apr_file_t *)apr_pcalloc(pool_in, sizeof(apr_file_t));
+ (*in)->pool = pool_in;
(*in)->fname = NULL;
(*in)->pipe = 1;
(*in)->timeout = -1;
@@ -111,8 +120,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
#if APR_FILES_AS_SOCKETS
(void) apr_pollset_create(&(*in)->pollset, 1, p, 0);
#endif
- (*out) = (apr_file_t *)apr_pcalloc(p, sizeof(apr_file_t));
- (*out)->pool = p;
+ (*out) = (apr_file_t *)apr_pcalloc(pool_out, sizeof(apr_file_t));
+ (*out)->pool = pool_out;
(*out)->fname = NULL;
(*out)->pipe = 1;
(*out)->timeout = -1;
@@ -150,7 +159,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
if (blocking == APR_WRITE_BLOCK /* READ_NONBLOCK */
|| blocking == APR_FULL_NONBLOCK) {
dwOpenMode |= FILE_FLAG_OVERLAPPED;
- (*in)->pOverlapped = (OVERLAPPED*) apr_pcalloc(p, sizeof(OVERLAPPED));
+ (*in)->pOverlapped =
+ (OVERLAPPED*) apr_pcalloc((*in)->pool, sizeof(OVERLAPPED));
(*in)->pOverlapped->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
(*in)->timeout = 0;
}
@@ -179,7 +189,8 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
if (blocking == APR_READ_BLOCK /* WRITE_NONBLOCK */
|| blocking == APR_FULL_NONBLOCK) {
dwOpenMode |= FILE_FLAG_OVERLAPPED;
- (*out)->pOverlapped = (OVERLAPPED*) apr_pcalloc(p, sizeof(OVERLAPPED));
+ (*out)->pOverlapped =
+ (OVERLAPPED*) apr_pcalloc((*out)->pool, sizeof(OVERLAPPED));
(*out)->pOverlapped->hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
(*out)->timeout = 0;
}
Modified: apr/apr/branches/1.6.x/include/apr_file_io.h
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/include/apr_file_io.h?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/include/apr_file_io.h (original)
+++ apr/apr/branches/1.6.x/include/apr_file_io.h Fri Mar 25 01:28:13 2016
@@ -695,7 +695,7 @@ APR_DECLARE(apr_status_t) apr_file_seek(
* @bug Some platforms cannot toggle between blocking and nonblocking,
* and when passing a pipe as a standard handle to an application which
* does not expect it, a non-blocking stream will fluxor the client app.
- * @deprecated @see apr_file_pipe_create_ex()
+ * @deprecated @see apr_file_pipe_create_pools()
*/
APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in,
apr_file_t **out,
@@ -719,6 +719,7 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
* does not expect it, a non-blocking stream will fluxor the client app.
* Use this function rather than apr_file_pipe_create() to create pipes
* where one or both ends require non-blocking semantics.
+ * @deprecated @see apr_file_pipe_create_pools()
*/
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
apr_file_t **out,
@@ -726,6 +727,33 @@ APR_DECLARE(apr_status_t) apr_file_pipe_
apr_pool_t *pool);
/**
+ * Create an anonymous pipe which portably supports async timeout options,
+ * placing each side of the pipe in a different pool.
+ * @param in The newly created pipe's file for reading.
+ * @param out The newly created pipe's file for writing.
+ * @param blocking one of these values defined in apr_thread_proc.h;
+ * @li #APR_FULL_BLOCK
+ * @li #APR_READ_BLOCK
+ * @li #APR_WRITE_BLOCK
+ * @li #APR_FULL_NONBLOCK
+ * @param pool_in The pool for the reading pipe.
+ * @param pool_out The pool for the writing pipe.
+ * @remark By default, the returned file descriptors will be inherited
+ * by child processes created using apr_proc_create(). This can be
+ * changed using apr_file_inherit_unset().
+ * @remark Some platforms cannot toggle between blocking and nonblocking,
+ * and when passing a pipe as a standard handle to an application which
+ * does not expect it, a non-blocking stream will fluxor the client app.
+ * Use this function rather than apr_file_pipe_create() to create pipes
+ * where one or both ends require non-blocking semantics.
+ */
+APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
+ apr_file_t **out,
+ apr_int32_t blocking,
+ apr_pool_t *pool_in,
+ apr_pool_t *pool_out);
+
+/**
* Create a named pipe.
* @param filename The filename of the named pipe
* @param perm The permissions for the newly created pipe.
Modified: apr/apr/branches/1.6.x/test/testpipe.c
URL: http://svn.apache.org/viewvc/apr/apr/branches/1.6.x/test/testpipe.c?rev=1736523&r1=1736522&r2=1736523&view=diff
==============================================================================
--- apr/apr/branches/1.6.x/test/testpipe.c (original)
+++ apr/apr/branches/1.6.x/test/testpipe.c Fri Mar 25 01:28:13 2016
@@ -56,7 +56,7 @@ static void set_timeout(abts_case *tc, v
apr_status_t rv;
apr_interval_time_t timeout;
- rv = apr_file_pipe_create_ex(&readp, &writep, APR_WRITE_BLOCK, p);
+ rv = apr_file_pipe_create_pools(&readp, &writep, APR_WRITE_BLOCK, p, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, readp);
ABTS_PTR_NOTNULL(tc, writep);
@@ -83,7 +83,7 @@ static void read_write(abts_case *tc, vo
nbytes = strlen("this is a test");
buf = (char *)apr_palloc(p, nbytes + 1);
- rv = apr_file_pipe_create_ex(&readp, &writep, APR_WRITE_BLOCK, p);
+ rv = apr_file_pipe_create_pools(&readp, &writep, APR_WRITE_BLOCK, p, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, readp);
ABTS_PTR_NOTNULL(tc, writep);