unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Philipp Stephani <p.stephani2@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>,
	dancol@dancol.org, tzz@lifelogs.com,
	 aurelien.aptel+emacs@gmail.com
Cc: emacs-devel@gnu.org
Subject: Re: Dynamic modules: MODULE_HANDLE_SIGNALS etc.
Date: Wed, 25 Nov 2015 18:50:05 +0000	[thread overview]
Message-ID: <CAArVCkSS6xGbm_hywkoJCM0Y6Obv56EHPg+Kk=m9uJgXZc0KpA@mail.gmail.com> (raw)
In-Reply-To: <83mvu1x6t3.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 2891 bytes --]

Eli Zaretskii <eliz@gnu.org> schrieb am Mi., 25. Nov. 2015 um 19:39 Uhr:

> These macros need more extensive documentation wrt when each one is
> needed and why.
>
> I tried to "reverse-engineer" that information from its current usage,
> and my best hypothesis is that they should be used if a functions
> calls some Emacs function that could potentially signal an error or
> throw.  For example, module_make_function calls list4, module_funcall
> calls Ffuncall, module_copy_string_contents calls ENCODE_UTF_8, etc.
>
> Is that correct?
>
> If it is, then I have a few questions:
>
>   . Why don't some functions use any of these macros, although they do
>     call Emacs functions?  Examples include module_make_integer (calls
>     make_number), and module_make_user_ptr (calls make_user_ptr).
>
>   . It seems like emacs-module.c assumes something about certain Emacs
>     functions, and based on that decides not to use these macros even
>     when calling those Emacs functions.  For example, module_vec_get
>     calls ASIZE and AREF, but doesn't use the MODULE_HANDLE_* macros.
>     Evidently, it assumes that neither ASIZE nor AREF will ever signal
>     or throw.  But isn't that a fragile assumption?  The
>     implementation of internal Emacs functions is subject to change
>     without notice, and it would be a maintenance burden to have to
>     analyze upon each such change whether emacs-module.c needs some
>     augmentation.


>   . How to decide whether to use MODULE_HANDLE_SIGNAL or
>     MODULE_HANDLE_THROW (or both)?  Again, it looks like the current
>     code simply assumes specific knowledge about certain Emacs
>     functions, knowledge which again can become outdated a year or a
>     month or a day from now.
>
> So bottom line (again assuming my guesses above are correct), I'd
> suggest to use these macros in all the emacs-module.c functions,


Yes, your thinking is correct. I used these macros based on the current
implementation. If this is too brittle, then these macros should indeed be
added to all environment functions (i.e. those functions that gets directly
called from module code).
I left them out purely for performance reasons: these macros both call
setjmp and possibly malloc, which can incur a significant penalty,
especially for environment functions that are very small otherwise (e.g. eq
or is_not_nil).


> and
> in fact come up with a wrapper around calls to Emacs functions and
> macros that will catch signals and throws, and make a point of calling
> each such function/macro through that wrapper.
>
>
My first approach was to create such a wrapper function, but I quickly
realized that it's too much of a hassle. Existing wrapper functions are
e.g. internal_condition_case in eval.c, but you'd need one wrapper function
for each signature, which quickly results in excessive code duplication.
Therefore I used the macros.

[-- Attachment #2: Type: text/html, Size: 3622 bytes --]

  reply	other threads:[~2015-11-25 18:50 UTC|newest]

Thread overview: 177+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-25 18:39 Dynamic modules: MODULE_HANDLE_SIGNALS etc Eli Zaretskii
2015-11-25 18:50 ` Philipp Stephani [this message]
2015-11-25 19:24   ` Eli Zaretskii
2015-11-26 21:29 ` Paul Eggert
2015-11-27  7:35   ` Eli Zaretskii
2015-11-27 19:19     ` Philipp Stephani
2015-11-28 10:58       ` Philipp Stephani
2015-11-28 12:10         ` Eli Zaretskii
2015-12-19 21:03         ` Philipp Stephani
2015-12-19 22:57           ` Philipp Stephani
2015-12-20 15:47             ` Eli Zaretskii
2015-12-20 18:34               ` Philipp Stephani
2015-12-20 19:11                 ` Eli Zaretskii
2015-12-20 21:40                   ` Paul Eggert
2015-12-21  3:33                     ` Eli Zaretskii
2015-12-21 11:00                       ` Paul Eggert
2015-12-21 11:21                         ` Yuri Khan
2015-12-21 11:34                           ` Paul Eggert
2015-12-21 15:46                         ` Eli Zaretskii
2015-12-21 18:15                           ` Paul Eggert
2015-12-21 18:28                             ` Daniel Colascione
2015-12-21 19:00                               ` Eli Zaretskii
2015-12-21 20:19                                 ` Philipp Stephani
2015-12-21 19:04                               ` Eli Zaretskii
2015-12-22  4:09                               ` Paul Eggert
2015-12-22  4:38                                 ` Daniel Colascione
2015-12-22  4:48                                   ` Paul Eggert
2015-12-22  4:52                                     ` Daniel Colascione
2015-12-22  6:09                                       ` Paul Eggert
2015-12-22  6:14                                         ` Daniel Colascione
2015-12-22  6:33                                           ` Paul Eggert
2015-12-22  6:35                                             ` Daniel Colascione
2015-12-22  6:44                                               ` Paul Eggert
2015-12-22  6:53                                                 ` Daniel Colascione
2015-12-22 16:13                                                   ` Eli Zaretskii
2015-12-22 16:12                                           ` Eli Zaretskii
2015-12-22 17:26                                             ` Philipp Stephani
2015-12-22 17:51                                               ` Eli Zaretskii
2015-12-22 16:03                                     ` Eli Zaretskii
2015-12-22 16:39                                       ` Paul Eggert
2015-12-22 17:46                                         ` Eli Zaretskii
2015-12-22 23:28                                           ` Paul Eggert
2015-12-23 16:10                                             ` Eli Zaretskii
2015-12-23 16:20                                               ` Philipp Stephani
2015-12-23 16:46                                                 ` Eli Zaretskii
2015-12-23 17:09                                                 ` Paul Eggert
2015-12-23 17:18                                                   ` Daniel Colascione
2015-12-24  2:51                                                     ` Paul Eggert
2015-12-24  3:11                                                       ` Daniel Colascione
2015-12-24 16:10                                                       ` Eli Zaretskii
2015-12-24 17:04                                                         ` Daniel Colascione
2015-12-24 17:17                                                           ` John Wiegley
2016-01-03 14:27                                                             ` Daniel Colascione
2016-01-03 15:46                                                               ` Eli Zaretskii
2016-01-03 15:49                                                                 ` Daniel Colascione
2016-01-03 16:40                                                                   ` Eli Zaretskii
2016-01-03 16:50                                                                     ` Daniel Colascione
2016-01-03 17:20                                                                       ` Eli Zaretskii
2016-01-03 16:31                                                               ` Paul Eggert
2016-01-03 16:48                                                                 ` Daniel Colascione
2016-01-03 18:07                                                                   ` Paul Eggert
2016-01-03 18:22                                                                     ` Daniel Colascione
2016-01-03 21:02                                                                       ` Paul Eggert
2016-01-03 21:12                                                                         ` Daniel Colascione
2016-01-03 23:11                                                                           ` Paul Eggert
2016-01-03 23:22                                                                             ` Daniel Colascione
2016-01-03 23:29                                                                               ` John Wiegley
2016-01-04  1:05                                                                               ` Paul Eggert
2016-01-04  1:07                                                                                 ` Daniel Colascione
2016-01-04 15:38                                                                               ` Eli Zaretskii
2016-01-04 15:40                                                                                 ` Daniel Colascione
2016-01-04 16:07                                                                                   ` Eli Zaretskii
2016-01-04 20:32                                                                                     ` John Wiegley
2016-01-04 20:34                                                                                       ` Daniel Colascione
2016-01-04 20:35                                                                                         ` Daniel Colascione
2016-01-04 22:06                                                                                           ` John Wiegley
2016-01-04 15:24                                                                           ` Eli Zaretskii
2016-01-04 15:28                                                                             ` Daniel Colascione
2016-01-04 16:00                                                                               ` Eli Zaretskii
2016-01-03 17:16                                                                 ` Eli Zaretskii
2016-01-03 17:22                                                                   ` Daniel Colascione
2016-01-03 17:39                                                                     ` Eli Zaretskii
2016-01-03 17:49                                                                       ` Daniel Colascione
2016-01-03 18:08                                                                         ` Eli Zaretskii
2016-01-03 18:24                                                                           ` Daniel Colascione
2016-01-03 18:51                                                                             ` Eli Zaretskii
2016-01-03 19:04                                                                               ` Daniel Colascione
2016-01-03 19:15                                                                                 ` Eli Zaretskii
2016-01-03 19:26                                                                                   ` Daniel Colascione
2016-01-03 19:46                                                                                     ` Eli Zaretskii
2016-01-03 19:47                                                                                       ` Daniel Colascione
2016-01-03 19:49                                                                                   ` John Wiegley
2016-01-03 20:14                                                                                     ` Daniel Colascione
2016-01-04  3:17                                                                           ` Richard Stallman
2016-01-03 18:17                                                                         ` Paul Eggert
2016-01-03 17:43                                                                     ` Eli Zaretskii
2016-01-03 20:25                                                               ` John Wiegley
2016-01-03 20:47                                                                 ` Daniel Colascione
2016-01-03 21:07                                                                   ` John Wiegley
2016-01-03 21:28                                                                     ` Daniel Colascione
2016-01-03 21:31                                                                       ` Daniel Colascione
2016-01-04 15:27                                                                         ` Eli Zaretskii
2016-01-04 15:29                                                                           ` Daniel Colascione
2016-01-04 16:01                                                                             ` Eli Zaretskii
2016-01-03 21:45                                                                       ` John Wiegley
2016-01-03 22:20                                                                         ` Daniel Colascione
2016-01-03 22:43                                                                           ` Crash recovery strategies (was: Dynamic modules: MODULE_HANDLE_SIGNALS etc.) John Wiegley
2016-01-03 22:55                                                                             ` Crash recovery strategies Daniel Colascione
2016-01-03 22:59                                                                               ` John Wiegley
2016-01-03 23:04                                                                                 ` Daniel Colascione
2016-01-03 23:20                                                                                   ` John Wiegley
2016-01-03 23:47                                                                               ` John Wiegley
2016-01-03 23:51                                                                                 ` Daniel Colascione
2016-01-04  0:12                                                                                   ` John Wiegley
2016-01-04 15:40                                                                                   ` Eli Zaretskii
2016-01-04 15:44                                                                                     ` Daniel Colascione
2016-01-04 15:33                                                                               ` Eli Zaretskii
2016-01-04 15:34                                                                                 ` Daniel Colascione
2016-01-04 16:02                                                                                   ` Eli Zaretskii
2016-01-03 23:21                                                                             ` Paul Eggert
2016-01-03 23:24                                                                               ` Daniel Colascione
2016-01-03 23:28                                                                                 ` John Wiegley
2016-01-04  0:51                                                                                 ` Paul Eggert
2016-01-03 23:27                                                                               ` John Wiegley
2016-01-03 23:29                                                                                 ` Daniel Colascione
2016-01-03 23:33                                                                                   ` Sending automatic crash reports to the FSF (was: Crash recovery strategies) John Wiegley
2016-01-03 23:36                                                                                     ` Sending automatic crash reports to the FSF Daniel Colascione
2016-01-03 23:39                                                                                       ` John Wiegley
2016-01-03 23:48                                                                                         ` Daniel Colascione
2016-01-04  1:34                                                                                   ` Crash recovery strategies Drew Adams
2016-01-04 15:32                                                                             ` Crash recovery strategies (was: Dynamic modules: MODULE_HANDLE_SIGNALS etc.) Eli Zaretskii
2016-01-04 15:35                                                                               ` Crash recovery strategies Daniel Colascione
2016-01-04 16:04                                                                                 ` Eli Zaretskii
2016-01-05  4:48                                                                                 ` Richard Stallman
2016-01-05 15:52                                                                                   ` Eli Zaretskii
2016-01-05 16:37                                                                                     ` Clément Pit--Claudel
2016-01-05 17:08                                                                                       ` Eli Zaretskii
2016-01-05 17:38                                                                                         ` Clément Pit--Claudel
2016-01-04 15:31                                                                           ` Dynamic modules: MODULE_HANDLE_SIGNALS etc Eli Zaretskii
2016-01-04 15:41                                                                             ` Daniel Colascione
2016-01-04 16:13                                                                               ` Eli Zaretskii
2016-01-04 15:29                                                                         ` Eli Zaretskii
2016-01-04 15:26                                                                       ` Eli Zaretskii
2015-12-24 17:36                                                           ` Eli Zaretskii
2015-12-24 18:06                                                             ` Daniel Colascione
2015-12-24 19:15                                                               ` Eli Zaretskii
2015-12-22 16:01                                   ` Eli Zaretskii
2015-12-22 16:32                                     ` John Wiegley
2015-12-22 20:31                                     ` Daniel Colascione
2015-12-22 20:46                                       ` Eli Zaretskii
2015-12-22 20:52                                         ` Daniel Colascione
2015-12-22 21:08                                           ` Eli Zaretskii
2015-12-22 21:18                                             ` Daniel Colascione
2015-12-23 16:07                                               ` Eli Zaretskii
2015-12-23 16:25                                                 ` Crash robustness (Was: Re: Dynamic modules: MODULE_HANDLE_SIGNALS etc.) Daniel Colascione
2015-12-23 17:30                                                   ` Eli Zaretskii
2015-12-23 17:41                                                     ` Daniel Colascione
2015-12-23 17:55                                                       ` Eli Zaretskii
2015-12-23 17:56                                                         ` Daniel Colascione
2015-12-23 18:09                                                           ` Eli Zaretskii
2015-12-23 18:19                                                             ` Daniel Colascione
2015-12-23 18:45                                                               ` Eli Zaretskii
2015-12-24  3:26                                                                 ` Daniel Colascione
2015-12-21 18:57                             ` Dynamic modules: MODULE_HANDLE_SIGNALS etc Eli Zaretskii
2015-12-21 20:15                             ` Philipp Stephani
2015-12-20 15:48           ` Eli Zaretskii
2015-12-20 18:27             ` Philipp Stephani
2015-12-20 19:00               ` Eli Zaretskii
2015-12-20 21:00                 ` Philipp Stephani
2017-03-26 20:18                   ` Philipp Stephani
2016-02-29 22:48           ` Philipp Stephani
2016-03-01 16:41             ` Paul Eggert
2016-03-01 21:43               ` Philipp Stephani
2016-03-02 18:54                 ` Paul Eggert
2016-03-31 18:44                   ` Philipp Stephani
2016-04-01  8:29                     ` Paul Eggert
2015-11-28 23:20     ` Paul Eggert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAArVCkSS6xGbm_hywkoJCM0Y6Obv56EHPg+Kk=m9uJgXZc0KpA@mail.gmail.com' \
    --to=p.stephani2@gmail.com \
    --cc=aurelien.aptel+emacs@gmail.com \
    --cc=dancol@dancol.org \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=tzz@lifelogs.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).