Hello, I've managed to reconstruct windows build environment and tried to run the previous patch.
==================== > > - DSM implimentation seems divided into generic part (dsm.c) and > > platform dependent part(dsm_impl.c). This dsm_keep_segment > > puts WIN32 specific part directly into dms.c. I suppose it'd > > be better defining DSM_OP_KEEP_SEGMENT and calling dms_impl_op > > from dms_keep_segment, or something. > > > > - Repeated calling of dsm_keep_segment even from different > > backends creates new (orphan) handles as many as it is called. > > Simplly invoking this function in some of extensions intending > > to stick segments might results in so many orphan > > handles. Something to curb that situation would be needed. > > I think the right way to fix above 2 comments is as suggested by Robert. Fine. I have no objection on that way. > > - "Global/PostgreSQL.%u" is the same literal constant with that > > occurred in dsm_impl_windows. It should be defined as a > > constant (or a macro). > > > > - dms_impl_windows uses errcode_for_dynamic_shared_memory() for > > ereport and it finally falls down to > > errcode_for_file_access(). I think it is preferable, maybe. > > Okay, will take care of these in new version after your verification > on Windows. I will apologize in advance for probably silly questions but I have two problems. ==== Server was crashed by dsm_demo_read on my test environment but unfortunately the cause is still uncertain for me. | LOG: server process (PID 19440) was terminated by exception 0xC0000005 | DETAIL: Failed process was running: select dsm_demo_read(4294967297); | HINT: See C include file "ntstatus.h" for a description of the hexadecimal value. | LOG: terminating any other active server processes 0xC0000005 is ACCESS_VIOLATION. The crash occurred at aset.c:853 | /* Try to allocate it */ | block = (AllocBlock) malloc(blksize); Where blksize is 55011304... It's sasier to investigate still more if I could step into functions in the dynamic loaded module, but VC2008 IDE skips over the function body:-( Do you have any idea how I can step into there? My environment is VC2008 Express/ Win7-64. Step-into bounces back at the line where function definition. | PG_FUNCTION_INFO_V1(dsm_demo_create); In contrast, dsm_demo_create doesn't crash and seems to return sane vaule. | =# select dsm_demo_create('hoge', 100); | dsm_demo_create | ----------------- | 4294967297 === And the another problem is perhaps not the issue of this module but it happened for me. | =# create extension dsm_demo; | ERROR: could not find function "dsm_demo_create" in file "c:/pgsql/lib/dsm_demo.dll" I've found that generated dll file exports the function with the names following after some investigation. | ...\Debug>dumpbin /EXPORTS dsm_demo.dll | Microsoft (R) COFF/PE Dumper Version 9.00.21022.08 | Copyright (C) Microsoft Corporation. All rights reserved. (snipped) | 1 0 0001100A Pg_magic_func = @ILT+5(_Pg_magic_func) | 2 1 00011118 pg_finfo_dsm_demo_create = @ILT+275(_pg_finfo_dsm_demo | _create) | 3 2 000110AF pg_finfo_dsm_demo_read = @ILT+170(_pg_finfo_dsm_demo_r Then explicitly designating the function name in 'CREATE FUNCTION' in dsm_demo--1.0.sql stops the complaint. I might did something wrong in setting up build environment for this dll but I have no idea which would cause this kind of trouble.. | CREATE FUNCTION dsm_demo_create(pg_catalog.text, pg_catalog.int4 default 0) | RETURNS pg_catalog.int8 STRICT | AS 'MODULE_PATHNAME', 'pg_finfo_dsm_demo_create' | LANGUAGE C; Do you have any idea for this? regards, -- Kyotaro Horiguchi NTT Open Source Software Center -- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers