diff --git a/src/backend/utils/adt/datum.c b/src/backend/utils/adt/datum.c
index f02a5e7..4957682 100644
*** a/src/backend/utils/adt/datum.c
--- b/src/backend/utils/adt/datum.c
*************** datumSerialize(Datum value, bool isnull,
*** 338,345 ****
  		}
  		else if (eoh)
  		{
! 			EOH_flatten_into(eoh, (void *) *start_address, header);
  			*start_address += header;
  		}
  		else
  		{
--- 338,356 ----
  		}
  		else if (eoh)
  		{
! 			char	   *tmp;
! 
! 			/*
! 			 * EOH_flatten_into expects the target address to be maxaligned,
! 			 * so we can't store directly to *start_address.
! 			 */
! 			tmp = (char *) palloc(header);
! 			EOH_flatten_into(eoh, (void *) tmp, header);
! 			memcpy(*start_address, tmp, header);
  			*start_address += header;
+ 
+ 			/* be tidy. */
+ 			pfree(tmp);
  		}
  		else
  		{
diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out
index 26409d3..d1f6510 100644
*** a/src/test/regress/expected/select_parallel.out
--- b/src/test/regress/expected/select_parallel.out
*************** ORDER BY 1, 2, 3;
*** 1088,1094 ****
  ------------------------------+---------------------------+-------------+--------------
  (0 rows)
  
! -- test interation between subquery and partial_paths
  SET LOCAL min_parallel_table_scan_size TO 0;
  CREATE VIEW tenk1_vw_sec WITH (security_barrier) AS SELECT * FROM tenk1;
  EXPLAIN (COSTS OFF)
--- 1088,1124 ----
  ------------------------------+---------------------------+-------------+--------------
  (0 rows)
  
! -- test passing expanded-value representations to workers
! SAVEPOINT settings;
! SET force_parallel_mode = 1;
! CREATE FUNCTION make_some_array(int,int) returns int[] as
! $$declare x int[];
!   begin
!     x[1] := $1;
!     x[2] := $2;
!     return x;
!   end$$ language plpgsql parallel safe;
! CREATE TABLE foo(f1 text, f2 int[], f3 text);
! INSERT INTO foo VALUES('1', ARRAY[1,2], 'one');
! PREPARE pstmt(text, int[]) AS SELECT * FROM foo WHERE f1 = $1 AND f2 = $2;
! EXPLAIN (COSTS OFF) EXECUTE pstmt('1', make_some_array(1,2));
!                             QUERY PLAN                            
! ------------------------------------------------------------------
!  Gather
!    Workers Planned: 3
!    ->  Parallel Seq Scan on foo
!          Filter: ((f1 = '1'::text) AND (f2 = '{1,2}'::integer[]))
! (4 rows)
! 
! EXECUTE pstmt('1', make_some_array(1,2));
!  f1 |  f2   | f3  
! ----+-------+-----
!  1  | {1,2} | one
! (1 row)
! 
! DEALLOCATE pstmt;
! ROLLBACK TO SAVEPOINT settings;
! -- test interaction between subquery and partial_paths
  SET LOCAL min_parallel_table_scan_size TO 0;
  CREATE VIEW tenk1_vw_sec WITH (security_barrier) AS SELECT * FROM tenk1;
  EXPLAIN (COSTS OFF)
diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql
index 938c708..326c8f6 100644
*** a/src/test/regress/sql/select_parallel.sql
--- b/src/test/regress/sql/select_parallel.sql
*************** ORDER BY 1;
*** 410,416 ****
  SELECT * FROM information_schema.foreign_data_wrapper_options
  ORDER BY 1, 2, 3;
  
! -- test interation between subquery and partial_paths
  SET LOCAL min_parallel_table_scan_size TO 0;
  CREATE VIEW tenk1_vw_sec WITH (security_barrier) AS SELECT * FROM tenk1;
  EXPLAIN (COSTS OFF)
--- 410,436 ----
  SELECT * FROM information_schema.foreign_data_wrapper_options
  ORDER BY 1, 2, 3;
  
! -- test passing expanded-value representations to workers
! SAVEPOINT settings;
! SET force_parallel_mode = 1;
! 
! CREATE FUNCTION make_some_array(int,int) returns int[] as
! $$declare x int[];
!   begin
!     x[1] := $1;
!     x[2] := $2;
!     return x;
!   end$$ language plpgsql parallel safe;
! CREATE TABLE foo(f1 text, f2 int[], f3 text);
! INSERT INTO foo VALUES('1', ARRAY[1,2], 'one');
! 
! PREPARE pstmt(text, int[]) AS SELECT * FROM foo WHERE f1 = $1 AND f2 = $2;
! EXPLAIN (COSTS OFF) EXECUTE pstmt('1', make_some_array(1,2));
! EXECUTE pstmt('1', make_some_array(1,2));
! DEALLOCATE pstmt;
! ROLLBACK TO SAVEPOINT settings;
! 
! -- test interaction between subquery and partial_paths
  SET LOCAL min_parallel_table_scan_size TO 0;
  CREATE VIEW tenk1_vw_sec WITH (security_barrier) AS SELECT * FROM tenk1;
  EXPLAIN (COSTS OFF)
