Bezpečnostní výzkumníci zveřejnili informace o osmi zranitelnostech, které postihují více než 700 modelů tiskáren, skenerů a štítkovačů značky Brother. Bezpečnostní upozornění vydali také další výrobci jako Fujifilm, Ricoh, Konica Minolta a Toshiba. Nejzávažnější zranitelnost CVE-2024-51978 umožňuje útočníkovi vzdáleně a bez přihlášení získat administrátorská oprávnění prostřednictvím výchozího hesla, které lze odvodit ze
… více »Společnost Oracle vlastní ochrannou známku JAVASCRIPT. Komunita kolem programovacího jazyka JavaScript zastoupena společností Deno Land vede právní bitvu za její osvobození, viz petice a otevřený dopis na javascript.tm. Do 7. srpna se k nim má vyjádřit Oracle (USPTO TTAB).
Byl představen samostatný rádiový modul Raspberry Pi Radio Module 2 s Wi-Fi a Bluetooth.
Certifikační autorita Let’s Encrypt ukončila k 4. červnu zasílání e-mailových oznámení o vypršení platnosti certifikátů. Pokud e-maily potřebujete, Let’s Encrypt doporučuje některou z monitorovacích služeb.
Přemýšlíte, jak začít prázdniny? Už v úterý 1. července se bude konat Virtuální Bastlírna, tedy online setkání bastlířů, techniků, vědců i akademiků, kde se ve volné diskuzi probírají novinky ze světa techniky, ale i jiných zajímavých témat.
Za poslední měsíc jsme byli svědky plamenů několika raket. Zatímco malá raketa od Hondy se úspěšně vznesla a opět přistála, raketa od SpaceX se rozhodla letět všemi směry najednou. Díkybohu méně … více »Linus Torvalds zmínil, že souborový systém Bcachefs zřejmě odstraní z mainline Linuxu v začleňovacím okně pro vydání 6.17. Kent Overstreet mu totiž posílá kód s novou funkcionalitou i pro začlenění do kandidátů na vydání, kdy očekává pouze opravy chyb. Kent Overstreet byl již dříve z vývoje vyloučen kvůli konfliktní komunikaci.
Ministerstvo průmyslu a obchodu propaguje Microsoft. Ten ve spolupráci s Ministerstvem průmyslu a obchodu spouští AI National Skilling Plan v ČR. "Iniciativa Microsoftu přináší konkrétní a praktickou podporu právě tam, kde ji nejvíc potřebujeme – do škol, firem i veřejné správy.", říká ministr průmyslu a obchodu Lukáš Vlček.
Jste český ISP? Vyplněním krátkého dotazníku můžete pomoci nasměrovat vývoj nové generace routerů Turris Omnia [𝕏].
Celkové tržby společnosti Canonical za rok 2024 byly 292 milionů dolarů (pdf). Za rok 2023 to bylo 251 milionů dolarů.
Byla vydána verze 1.88.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
class Thread{ private: pthread_t m_tHandle; unsigned int m_nStatus; Mutex m_tMutex; public: enum Status{ NotRunning = 0, Running = 1, Suspended = 2, Zombie = 3 }; Thread(); virtual ~Thread(); void run(); void kill(); void wait(); pthread_t handle() const { return m_tHandle; }; void handle( pthread_t handle ) { m_tHandle = handle; } void lock() { m_tMutex.lock(); } void unlock(){ m_tMutex.unlock(); } bool tryLock(){ return m_tMutex.tryLock(); } void status( unsigned int status ); unsigned int status() const { return m_nStatus; } virtual void start(); virtual void stop(); static void waitForAll(); }; static void *entry_point(void *thread_) { Thread* thread = reinterpret_cast<Thread*>(thread_); signal(SIGQUIT, signal_handler_SIGQUIT); thread_list_mutex.lock(); thread_list.insert( std::make_pair(pthread_self(), thread) ); thread_list_mutex.unlock(); thread->handle(pthread_self()); thread->start(); thread->stop(); thread->status(Thread::Zombie); pthread_exit(NULL); return NULL; } void Thread::run() { if( status() == NotRunning ) { label_create: status(Running); pthread_create(&m_tHandle, NULL, &entry_point, this); } else if( status() == Zombie ){ wait(); goto label_create; } }Ve funkci
static void *entry_point(void *thread_)
volám thread->start()
. Problém je, že se vždy zavolá metoda start() třídy Thread a né metoda odvozené třídy MujThread
:
class MujThread: public Thread{ public: MujThread(){} virtual ~MujThread(){} virtual void start() { printf("MujThread start()\n"); while(true); } virtual void stop() { printf("MujThread stop()\n"); } };
(Thread*)thread_
, bezúspěšně. Vím ale, že ten kód ještě nedávno fungoval. Pomalu bych řekl, že přestal fungovat po aktualizaci gcc.
pure virtual method called terminate called without an active exception ./testutk: line 4: 6543 Neúspěšně ukončen (SIGABRT)
make clean
.
MujThread::start()
nedávat jako inline. Kompilátor by sice měl být dost chytrý, aby buď ignoroval evidentní chybu programátora, nebo protestoval, jenže právě to ignorování chyby lze provést dvěma způsoby: buď bude ignorovat virtual
nebo inline
(zde implicitní). Musel bych se podívat, co v takové situaci předepisuje specifikace jazyka, ale v každém případě bude jistější nepožadovat po překladači něco, co je principiálně nemožné.
MujThred::start()
jako inline, nefunguje to. Mám jinou třídu (Application):
class Application{ .... public: .... virtual bool onInit() { return true; } virtual void onQuit() {} .... };Od té odvozuji
TestApplication
:
class TestApplication: public Application{ protected: MujThread t; public: virtual bool onInit() { ... t.run(); return true; } virtual void onQuit() { t.kill(); } };Zde však volání virtuálních metod funguje správně, což popírá vaši domněnku. (Už jste viděl zdrojový kód Qt knihovny? Je tam toho plno.) Problém bude nejspíš jinde. A jak říkám výše, ten kód fungoval naprosto bezchybně, když jsem ho před časem použil (ale na jiné distribuci, s jiným kernelem - 2.6.17, teď 2.6.18 - a s trochu nižší verzí GCC).
Thread::run()
(viz. kód výše), konkrétně se zavolá po vytvoření nového vlákna: pthread_create(&m_tHandle, NULL, &entry_point, this)
.
Tiskni
Sdílej: