Opened 11 years ago
Closed 10 years ago
#2860 closed defect (invalid)
Coolstream CNXT Crash when oscam restart
Reported by: | Philipp | Owned by: | |
---|---|---|---|
Priority: | critical | Component: | DVBApi |
Severity: | high | Keywords: | |
Cc: | Sensitive: | yes |
Description
Revision
7704
Issue Description
Oscam should do a KAL Trace Terminating like mgcamd, otherwise we got a curious CNXT crash when oscam restart on a descrambled channel. After this error, the channel is no longer be descrambled. I`ve logged Oscam restart, mgcamd restart and every issue in Coolstream log. So u can see the difference.
This error was never fixed before!
When the issue occurs
Restart Oscam in Coolstream on a descrambled channel
How the issue is reproducable
see above
Log as an attachment.
Attachments (2)
Change History (18)
by , 11 years ago
Attachment: | oscam_coolstream_cnxt.log added |
---|
comment:1 by , 11 years ago
comment:2 by , 11 years ago
There is always a function cnxt_kal_terminate(); in coolapi.h defined and used in module-dvbapi-coolapi.c. Maybe we can used it at start or end of oscam.
First there must be a way to close down oscam like mgcamd, cuz users often use
killall -9 oscam. But..., maybe the code works at start of oscam, too.
comment:3 by , 11 years ago
Seems that is it easy to fix.
We must only call coolapi_close_all(), when restart is called, like in cs_exit();
:)))
edit: doesnt work.
But kill pidof oscam
does it right. After a new start on same channel it works.
comment:4 by , 11 years ago
There is no need for the ifdefs and the reordering of defines in oscam.c
comment:5 by , 11 years ago
I thought if not using ifdefs these functions are always called even if not compiled with azboxapi or coolapi. Seems to me pretty useless. Am I mistaken?
comment:6 by , 11 years ago
By the way the real problem with oscam currently is that signal handling is completely busted so nothing from the cleanup functions is executed for example when SIGINT is received. Fixing it is tricky because of the "restart" logic. I have tried to fix the signal handling but quickly got into a mess so I left it for later.
Please don't add new ifdefs, the functions you are using are already replaced with static inline versions in case the functionality is disabled:
#if defined(HAVE_DVBAPI) && defined(WITH_COOLAPI) extern void coolapi_open_all(void); extern void coolapi_close_all(void); #else static inline void coolapi_open_all(void) { } static inline void coolapi_close_all(void) { } #endif #if defined(HAVE_DVBAPI) && defined(WITH_AZBOX) void azbox_init(void); void azbox_close(void); #else static inline void azbox_init(void) { } static inline void azbox_close(void) { } #endif
I removed quite a lot ifdefs using this technique.
comment:8 by , 11 years ago
Won't this break csctapi/ifd_cool.c ?
Good point... never knew it was there. Lets wait and see ;)
comment:9 by , 11 years ago
It would be better to put coolapi_close_all() before coolapi_open_all() in oscam.c and if needed move the two calls up a bit so a restart would execute the code.
comment:11 by , 11 years ago
diff --git a/oscam.c b/oscam.c index f9bc059..1c9cac6 100644 --- a/oscam.c +++ b/oscam.c @@ -3963,6 +3963,7 @@ int32_t main (int32_t argc, char *argv[]) cs_lock_create(&fakeuser_lock, 5, "fakeuser_lock"); cs_lock_create(&ecmcache_lock, 5, "ecmcache_lock"); cs_lock_create(&readdir_lock, 5, "readdir_lock"); + coolapi_close_all(); coolapi_open_all(); init_config(); cs_init_log();
by , 11 years ago
Attachment: | cooltryfix.patch added |
---|
V4... idea by GF... as it is simple it should work, simple always works ;)
comment:12 by , 11 years ago
didnt work. can u add some code, to see that the function is called at restart?
comment:13 by , 11 years ago
The whole restart thing is kind of broken. The problem with restart is that oscam do not execute the cleanup code and that is the problem, whatever we try to do on the start if we don't execute the cleanup code we'll have errors.
comment:16 by , 10 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
as discussed with depp0n: if you hard kill oscam there is no way oscam can close it´s filters. so don´t use killall -9. the oscam restart behaviour was recently fixed by Admin, but this has nothing to do with it as it is a hard kill.
Looked into it but the needed api call isnt defined in oscam and I'm not into that "cool" to add it. You will have to wait for a dev that is into that cool stuff like dingo35 (?)