From: Michael Niedermayer <michael@niedermayer.cc> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [RFC] Advanced Error Codes Date: Sun, 6 Jul 2025 16:33:54 +0200 Message-ID: <20250706143354.GA29660@pb2> (raw) In-Reply-To: <aGfXL49EU2uNlz18@phare.normalesup.org> [-- Attachment #1.1: Type: text/plain, Size: 3952 bytes --] Hi Nicolas On Fri, Jul 04, 2025 at 03:29:19PM +0200, Nicolas George wrote: > Michael Niedermayer (HE12025-07-03): > > return av_adv_err_new(AVERROR_INVALIDDATA, "Garbled foobar data", "Foo triangle quantum decoder" > > __FILE__, __LINE__, NULL, "Whaetver you like %s", favorite_food); > > > > teh return type is int64_t here > > So we need to change all our return types? no we can do it with int too, if thats preferred. > > > this also cannot fail as it allocates nothing > > Where does the memory storing “favorite_food” come from? theres a fixed length array of AdvancedError structs. AdvancedError has a fixed length char field. Thats where a single custom text string can be stored. Which would be maybe "Whaetver you like pizza" if favorite_food was "pizza" its very very simple typdef struct AdvancedError { const char *error_name; ///< like "Timeout" or "Invalid Bitstream" const char *operation_name; ///< like "Network Read" or "H.264 block parsing" const char *source_filename; ///< like ffmpeg.c int source_line_number; ///< like 123 for line 123 in ffmpeg.c char free_form_description[FREE_FORM_LEN]; ///< anything extra that doesnt fit in pointers to static const strings int64_t this_error; int64_t previous_error; ///< A previous related error, if any int64_t timestamp; ///< Timestamp at which the error occured int thread_id; } AdvancedError; struct AdvancedError advanced_error[MAX_CONCURRENT_ERRORS]; > > > it also needs no context but would use a mutex or thread local storage > > > > the message length would be bound by a maximum, > > Of course. > > > I am not sure if passing a context around is going to find the volunteers > > to implement and maintain. Also it has a performance impact for small and > > lightweight functions. > > We already pass contexts around everywhere. * Many places but not everywhere, * The contexts do not match the lifetime of the errors * The contexts can be accessed from multiple threads * There can be multiple relevant errors for a single context > > I would argue that the small lightweight functions that do not already > have a context for the error are too low level to be able to provide a > meaningful error message. "square root of negative argument" in mydecoder.c at line 123 is more informative than EINVAL, and having no clue where or why that happened for example decode() returning AVERROR(EINVAL) with 5000 lines of cryptic parser errors in messages vs. "square root of negative argument" in mydecoder.c at line 123, called by vector_length_compute() line 511 called by read_nnet() line 732 free_form_description="training_set_maybe_corrupted.dat" Note by the time this is returned decode failed and many contexts have been destroyed. > > So, my proposal is similar to yours, except for the following > differences: > > - We allocate the memory for error messages contexts. That way, we avoid > the issue of using locks or thread-local storage but do not have a > hard limit on simultaneous errors. malloc() can fail and it needs to be freed exactly once. And not freed before the caller is finished doing anything it likes to do with the error information. And it very possibly wants to pass it on to its caller > > - We do not change the return type of all our API, we still return “a > negative AVERROR code” to keep source compatibility, and use the best > code we can find. Then you no longer know which error relates to which message So the problem that I see, isnt solved. Maybe it helps with other problems, i dont know. thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Democracy is the form of government in which you can choose your dictator [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2025-07-06 14:34 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-07-02 14:43 Michael Niedermayer 2025-07-02 14:52 ` Nicolas George 2025-07-02 17:16 ` Michael Niedermayer 2025-07-03 8:56 ` Nicolas George 2025-07-03 15:52 ` Michael Niedermayer 2025-07-04 13:29 ` Nicolas George 2025-07-06 14:33 ` Michael Niedermayer [this message] 2025-07-02 17:21 ` Michael Niedermayer
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 * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250706143354.GA29660@pb2 \ --to=michael@niedermayer.cc \ --cc=ffmpeg-devel@ffmpeg.org \ /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
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git