gnucash unstable: Multiple changes pushed

John Ralls jralls at ceridwen.us
Fri Dec 29 12:14:32 EST 2017



> On Dec 29, 2017, at 8:55 AM, Geert Janssens <geert.gnucash at kobaltwit.be> wrote:
> 
> Op vrijdag 29 december 2017 17:22:29 CET schreef John Ralls:
>>> On Dec 29, 2017, at 7:41 AM, Geert Janssens <geert.gnucash at kobaltwit.be>
>>> wrote:> 
>>> Op woensdag 27 december 2017 00:37:19 CET schreef John Ralls:
>>>> commit 91727525b9cd3c12f4fa25268131b0161c6fc79e
>>>> Author: John Ralls <jralls at ceridwen.us>
>>>> Date:   Tue Dec 26 13:01:50 2017 -0800
>>>> 
>>>>   Enforce -Werror on C++ files and fix resulting errors.
>>> 
>>> <snip>
>>> 
>>>> diff --git a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
>>>> b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp index
>>>> 9402f38..1bfa08e 100644
>>>> --- a/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
>>>> +++ b/gnucash/import-export/csv-imp/assistant-csv-trans-import.cpp
>>>> @@ -355,12 +355,12 @@ static void csv_tximp_preview_currency_fmt_sel_cb
>>>> (GtkComboBox* format_selector, info->preview_update_currency_format();
>>>> }
>>>> 
>>>> -void csv_tximp_preview_col_type_changed_cb (GtkComboBox* cbox,
>>>> CsvImpTransAssist* info)
>>>> +static void csv_tximp_preview_col_type_changed_cb
>>>> (GtkComboBox* cbox, CsvImpTransAssist* info) {
>>>> 
>>>>    info->preview_update_col_type (cbox);
>>>> 
>>>> }
>>> 
>>> Apparently your new compile options require function declarations or to
>>> declare local functions static. What was wrong with the previous behavior
>>> that you choose to enforce this ?
>> 
>> CMakeLists.txt didn’t set any warning or error flags on C++ files, not even
>> -Werror, so I just copied over the C flags and then adjusted them to deal
>> with g++ wanting -Wmissing-declarations instead of -Wmissing-prototypes.
>> 
>> I just now looked at configure.ac and the flags there are rather different,
>> with neither missing-declarations nor missing-prototypes on either C or
>> C++.
>> 
>> configure.ac:
>> AM_CFLAGS=-Wall -Werror -Wno-unused -Wno-deprecated-declarations
>> -Wmissing-prototypes -Wmissing-prototypes
>> -Werror-implicit-function-declaration
>> 
>> AM_CXXFLAGS=-Wall -Werror -Wno-unused
>> 
>> CMakeLists.txt:
>> CMAKE_C_FLAGS=-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall
>> -Wunused -Wmissing-prototypes -Wmissing-declarations  -Wno-unused
>> -Wno-deprecated-declarations -std=gnu11 CMAKE_CXX_FLAGS=-std=gnu++11
>> -Werror -Wall -Wmissing-declarations -Wno-unused
>> 
>> I think that we should remove -Wno-unused from CXXFLAGS in general and only
>> use it where needed on external sources. GnuCash C++ code is all new and it
>> should all compile clean. For that code the more warnings the better: It
>> gets the compiler to help us write better code.
>> 
> Ok, I fully agree.
> 
>> I’m in favor of having missing-prototypes/missing-declarations and declaring
>> compilation-unit-local functions static to make their scope explicit.
>> 
> Ok, that's a good motivation. Just to be clear for me, having a function 
> static is different from having a static variable, right ? As I understand it 
> the latter is bad for thread safety, the former only ensures its local scope.

Yes, and static in a class declaration means something else again.

Careless use of shared state will cause thread safety issues, yes. But static variables aren’t the main source of the shared state problem: Promiscuous passing of pointers to heap/free store variables is. Consider the possibility that two threads get the pointer to a particular split from QofContainer and proceed to edit it. There’s no mutex in QofInstance’s begin_edit/commit_edit, so the results are almost guaranteed to be interesting.

Regards,
John Ralls



More information about the gnucash-devel mailing list