[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[netCDF #NQH-437723]: nc_test failure on aix7 power7 cluster
- Subject: [netCDF #NQH-437723]: nc_test failure on aix7 power7 cluster
- Date: Wed, 20 May 2015 09:55:09 -0600
Hello Wolfgang,
Thank you very much for the bug report, and thank you even more for the
diagnosis/fix. We do not currently have access to an AIX environment or IBM's
XL C compiler, so debugging these issues would have been very difficult. I
will incorporate an explicit NULL check after malloc is called, as you suggest,
and will look for similar issues. I'll also make a note of the
-D_LINUX_SOURCE_COMPAT flag for the XL C compiler.
Thanks again, have a great day,
-Ward
> Dear NetCDF team,
>
> I recently needed to build NetCDF 4.3.3.1 on a POWER6 machine with AIX 6.1
> and IBM’s XL C compiler V11.1. I encountered two issues and found a simple
> solution for both of these. As POWER/AIX is among the more exotic platforms,
> I thought I’d send you this to share with other users, if you find it useful.
>
> The issues were:
>
> 1. Compilation failure due to diverging function return type definitions
> between prototypes and body (type “OCerror” vs type “int” in oc.h, ochttp.c,
> and ocrc.c in the “oc2” directory)
>
> 2. Test failures in the “nc_test” suite (in the “nc_test” directory) due
> to reported malloc failures
> It seems that both issues were found previously by other users (e.g. “[netCDF
> #NQH-437723]: nc_test failure on aix7 power7 cluster for the second issue”).
>
> The problems stem from differences in the behaviour of the XL C compiler
> compared to, e.g., the GCC compiler. They can be easily handled without
> applying any code changes by using a XL C pre-processor macro that asks for
> “Linux-compatible” compiler behaviour:
> CPPFLAGS = -D_LINUX_SOURCE_COMPAT
> The NetCDF package can now be built and tested without problems.
>
> Malloc failures:
> I investigated the malloc failures in the “nc_test” suite a bit more, they
> stem from malloc(0) requests. The code generated by the XL C compiler returns
> a NULL pointer for malloc(0), where GCC allocates memory.
>
> This situation appears under the following conditions:
>
> - Data is written to a variable in a NetCDF file with NetCDF4 format
> using one of the “nc_put_var_xxx” functions
>
> - The variable has at least one unlimited dimension with current
> length 0
>
> - The program attempts to write numerical data with a different type
> than the variable definition, triggering automatic conversion
>
> This results in a “malloc(0)” request for a memory buffer in line 660 of
> source file libsrc4/nc4hdf.c. Unlike GCC, the XL C malloc returns a NULL
> pointer, causing NetCDF to report a malloc failure. It seems that the C
> standard allows both NULL pointers and memory allocation for a malloc(0)
> request. It could therefore be useful to handle this ambiguity explicitly in
> NetCDF, to avoid the error message.
>
> I hope that you find this useful. Please let me know if you have any
> questions.
>
> Best regards,
>
> Wolfgang
>
> Dr Wolfgang Hayek
> HPC Scientific Programmer
>
> +64-4-386-0810 | +64-27-801-4625 | 301 Evans Bay Parade, Greta Point,
> Wellington | www.niwa.co.nz<http://www.niwa.co.nz>
> [NIWA]<http://www.niwa.co.nz>
> To ensure compliance with legal requirements and to maintain cyber security
> standards, NIWA's IT systems are subject to ongoing monitoring, activity
> logging and auditing. This monitoring and auditing service may be provided by
> third parties. Such third parties can access information transmitted to,
> processed by and stored on NIWA's IT systems.
>
>
>
>
Ticket Details
===================
Ticket ID: NQH-437723
Department: Support netCDF
Priority: Normal
Status: Closed