View Issue Details

IDProjectCategoryView StatusLast Update
0000620FreeCADBugpublic2012-03-11 08:53
ReporterdjreichelAssigned To 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version0.12 
Target VersionFixed in Version0.13 
Summary0000620: Help -> About FreeCAD crashes program
Descriptionlaunching "About FreeCAD" crashes. "About Qt" works fine.

strace shows FreeCAD trying to load a missing image file "splash-image.png"

I was not able to locate that in the source distribution. Copying another png file to that filename did not result in any change.

The last thing FreeCAD appeared to do before crashing was to access /etc/localtime

Fedora 16
Additional InformationStrace dump:

stat64("/home/dennis/.FreeCAD/pixmaps/splash_image.png", {st_mode=S_IFREG|0644, st_size=66177, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
tgkill(18501, 18501, SIGABRT) = 0
--- {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=18501, si_uid=1000} (Aborted) ---
write(1, "\33[1;31mAbnormal program terminat"..., 50Abnormal program termination...
) = 50
munmap(0xb2344000, 34756) = 0
write(5, "@", 1) = 1
close(5) = 0
close(4) = 0
rt_sigaction(SIGCHLD, NULL, {0x44cffcb0, [], SA_NOCLDSTOP}, 8) = 0
rt_sigaction(SIGCHLD, {SIG_DFL, [], 0}, NULL, 8) = 0
write(1, "\33[0m", 4) = 4
exit_group(3) = ?
[dennis@verne .FreeCAD]$
TagsNo tags attached.

Relationships

related to 0000594 closed Mac OS X build crashes on "About FreeCAD" 
has duplicate 0000838 closed Selecting "FreeCAD -> About FreeCAD" crashes 

Activities

wmayer

2012-03-04 08:33

administrator   ~0001706

What version of FreeCAD do you have? Have you built it yourself? What is the Qt version?

When starting FreeCAD does the splash screen appear normally? In FreeCAD it's possible to set an own splash screen. This can be done by creating this file:
$HOME/.FreeCAD/pixmaps/splash_image.png

When loading the splash image we check first the above file and I assume there might be a Qt issue which makes the application crashing.

wmayer

2012-03-04 08:43

administrator   ~0001707

Here is a little demo example. You can build it with:
qmake -project
qmake <project_file>.pro # replace project_file with the actual name
make
run the executable


#include <QtCore>
#include <iostream>

int main(int argc, char** argv)
{
    QDir dir(QString::fromUtf8("/home/dennis/.FreeCAD"));
    QFileInfo fi(dir.filePath(QString::fromAscii("pixmaps/splash_image.png")));
    if (fi.isFile() && fi.exists())
        std::cout << "File is there!";
    else
        std::cout << "File is not there!";

    return 0;
}

djreichel

2012-03-04 14:45

reporter   ~0001710

This has crashed here with git snapshots for the past week. (previous to that I had not built and installed FreeCAD)

And to clarify further, launching "Help->About.." did crash with or without the splash_image.png file in place.

I'm using Qt4. When I saw that the trace was looking for $HOME/.FreeCAD/pixmaps/splash_image.png I created that file (which is now displayed while FreeCAD is loading)

The test program you posted failed to complile (did not find QtCore) using qmake to set up Makefile. It did build and run successfully using qmake-qt4.

(the result was "File is there!")

From Makefile:

INCPATH = -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -I.
LINK = g++
LFLAGS = -Wl,-O1
LIBS = $(SUBLIBS) -L/usr/lib -lQtGui -lQtCore -lpthread
AR = ar cqs
RANLIB =
QMAKE = /usr/bin/qmake-qt4

wmayer

2012-03-04 15:25

administrator   ~0001711

That's really odd. I don't see what's causing this crash. Maybe you can test this modified example:

#include <QtCore>
#include <iostream>
#include <stdlib.h>

QString myDecoderFunc(const QByteArray &localFileName)
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    return codec->toUnicode(localFileName);
}

QByteArray myEncoderFunc(const QString &fileName)
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    return codec->fromUnicode(fileName);
}

int main(int argc, char** argv)
{
    (void)QLocale::system();
    QFile::setEncodingFunction(myEncoderFunc);
    QFile::setDecodingFunction(myDecoderFunc);
    putenv("LANG=C");
    putenv("LC_ALL=C");

    QDir dir(QString::fromUtf8("/home/dennis/.FreeCAD"));
    QFileInfo fi(dir.filePath(QString::fromAscii("pixmaps/splash_image.png")));
    if (fi.isFile() && fi.exists())
        std::cout << "File is there!";
    else
        std::cout << "File is not there!";

    return 0;
}

djreichel

2012-03-05 02:06

reporter   ~0001712

the new code with the unicode testing works fine..
[dennis@verne test_wmayer2]$ qmake-qt4 -project
[dennis@verne test_wmayer2]$ qmake-qt4
[dennis@verne test_wmayer2]$ make
g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I. -I. -o test_wmayer2.o test_wmayer2.cpp
test_wmayer2.cpp: In function ‘int main(int, char**)’:
test_wmayer2.cpp:22:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
test_wmayer2.cpp:23:23: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
test_wmayer2.cpp: At global scope:
test_wmayer2.cpp:17:5: warning: unused parameter ‘argc’ [-Wunused-parameter]
test_wmayer2.cpp:17:5: warning: unused parameter ‘argv’ [-Wunused-parameter]
g++ -Wl,-O1 -o test_wmayer2 test_wmayer2.o -L/usr/lib -lQtGui -lQtCore -lpthread
[dennis@verne test_wmayer2]$ ./test_wmayer2
File is there!
[dennis@verne test_wmayer2]$

wmayer

2012-03-06 06:19

administrator   ~0001715

Is it an option to compile the FreeCAD sources and run it in the debugger? This way we should get a more detailed error description than what we have now.

djreichel

2012-03-06 11:32

reporter   ~0001716

I added some qDebug() diagnostic output to SplashScreen.cpp and built with --enable-loginfo.

Attach observer 0x895dec0
Attach observer 0x8949540
Attach observer 0x8955ba8
Attach observer 0x8997604
Attach observer 0x89df674
Attach observer 0x89df674
Attach observer 0x89eba70
Attach observer 0x89fb290
* diagnostic message from within SplashObserver..
loaded the Generic plugin
* const AboutDialogFactory *AboutDialogFactory::defaultFactory()
* QDialog *AboutDialogFactory::create(QWidget *parent) const
* Entering AboutDialog::AboutDialog
* Leaving AboutDialog::AboutDialog
QSharedPointer: pointer 0x8e2a9d8 already has reference counting
Abnormal program termination...
[dennis@verne ~]$

I'll try running in gdb.

djreichel

2012-03-08 11:42

reporter   ~0001725

Here's the console output and backtrace of a session ending with a crash at Help -> About FreeCAD (note: the lines beginnging with "*" are QtDebug diagnostic messages I added to some SplashScreen methods.)

GNU gdb (GDB) Fedora (7.3.50.20110722-10.fc16)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/dennis/.FreeCAD/freecad-0.12...Reading symbols from /usr/lib/debug/usr/bin/freecad-0.12.debug...done.
done.
(gdb) run
Starting program: /home/dennis/.FreeCAD/freecad-0.12
warning: "/usr/lib/debug/usr/lib/libQt3Support.so.4.8.0.debug": separate debug info file has no debug info
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
warning: "/usr/lib/debug/usr/lib/libicudata.so.46.0.debug": separate debug info file has no debug info
FreeCAD 0.12, Libs: 0.12R5382
© Juergen Riegel, Werner Mayer, Yorik van Havre 2001-2011
  ##### #### ### ####
  # # # # # #
  # ## #### #### # # # # #
  #### # # # # # # # ##### # #
  # # #### #### # # # # #
  # # # # # # # # # ## ## ##
  # # #### #### ### # # #### ## ## ##

Attach observer 0x82f7d88
Attach observer 0x82fd5c0
Attach observer 0x8303590
Attach observer 0x8382ffc
Attach observer 0x8388c34
Attach observer 0x8388c34
Attach observer 0x83a3358
Attach observer 0x83acf48
[New Thread 0xb6e39b40 (LWP 16824)]
* diagnostic message from within SplashObserver..
[New Thread 0xb5ab8b40 (LWP 16827)]
[New Thread 0xb518fb40 (LWP 16828)]
loaded the Generic plugin
[New Thread 0xae20cb40 (LWP 16829)]
[New Thread 0xad8ffb40 (LWP 16830)]
[New Thread 0xad0feb40 (LWP 16831)]
loaded the Generic plugin
[New Thread 0xae20cb40 (LWP 16829)]
[New Thread 0xad8ffb40 (LWP 16830)]
[New Thread 0xad0feb40 (LWP 16831)]
* const AboutDialogFactory *AboutDialogFactory::defaultFactory()
QDialog *AboutDialogFactory::create(QWidget *parent) const
* Entering AboutDialog::AboutDialog
* Leaving AboutDialog::AboutDialog
QSharedPointer: pointer 0x8380698 already has reference counting

Program received signal SIGABRT, Aborted.
0xb7fff424 in __kernel_vsyscall ()
(gdb) bt
#0 0xb7fff424 in __kernel_vsyscall ()
#1 0x43b1498f in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2 0x43b162d5 in __GI_abort () at abort.c:91
#3 0x422568fc in messageHandler (type=QtFatalMsg, msg=
    0x8879a78 "QSharedPointer: pointer 0x8380698 already has reference counting") at Application.cpp:1316
#4 0x44c08a86 in qt_message_output (msgType=QtFatalMsg, buf=
    0x8879a78 "QSharedPointer: pointer 0x8380698 already has reference counting") at global/qglobal.cpp:2200
#5 0x44c08cdd in qt_message (msgType=QtFatalMsg, msg=
    0x44dd3368 "QSharedPointer: pointer %p already has reference counting", ap=
    0xbfffd4b4 "\230\006\070\b\230\006\070\b\360\271\305D\350\316\202B\350f\206\b(VF\b\321\t)B\350f\206\b\230\006\070\b\001") at global/qglobal.cpp:2298
#6 0x44c08df9 in qFatal (msg=0x44dd3368 "QSharedPointer: pointer %p already has reference counting")
    at global/qglobal.cpp:2481
#7 0x44c5ba2f in QtSharedPointer::ExternalRefCountData::setQObjectShared (this=0x88666e8, obj=0x8380698)
    at tools/qsharedpointer.cpp:1242
#8 0x422909d1 in QtSharedPointer::ExternalRefCount<QDialog>::internalFinishConstruction (this=0xbfffd564, ptr=0x8380698)
    at /usr/include/QtCore/qsharedpointer_impl.h:381
#9 0x422908ef in QtSharedPointer::ExternalRefCount<QDialog>::internalConstruct (this=0xbfffd564, ptr=0x8380698)
    at /usr/include/QtCore/qsharedpointer_impl.h:357
#10 0x4229084b in QtSharedPointer::ExternalRefCount<QDialog>::ExternalRefCount (this=0xbfffd564, ptr=0x8380698)
    at /usr/include/QtCore/qsharedpointer_impl.h:391
#11 0x422905b8 in QSharedPointer<QDialog>::QSharedPointer (this=0xbfffd564, ptr=0x8380698)
    at /usr/include/QtCore/qsharedpointer_impl.h:473
#12 0x4228e491 in StdCmdAbout::activated (this=0x82f80f8, iMsg=0) at CommandStd.cpp:229
#13 0x4227ead4 in Gui::Command::invoke (this=0x82f80f8, i=0) at Command.cpp:282
#14 0x42244fd4 in Gui::Action::onActivated (this=0x8444b90) at Action.cpp:82
#15 0x42249c2c in Gui::Action::qt_static_metacall (_o=0x8444b90, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0xbfffd718)
    at moc_Action.cpp:50
#16 0x44d3eea1 in QMetaObject::activate (sender=0x846ad30, m=0x463918d8, local_signal_index=1, argv=0xbfffd718)
    at kernel/qobject.cpp:3547
#17 0x45a1b15e in QAction::triggered (this=0x846ad30, _t1=false) at .moc/release-shared/moc_qaction.cpp:277
#18 0x45a1b3fb in QAction::activate (this=0x846ad30, event=QAction::Trigger) at kernel/qaction.cpp:1257
#19 0x45edac9c in QMenuPrivate::activateCausedStack (this=0x8464258, causedStack=..., action=0x846ad30, action_e=
    QAction::Trigger, self=true) at widgets/qmenu.cpp:1028
#20 0x45ee1b6f in QMenuPrivate::activateAction (this=0x8464258, action=0x846ad30, action_e=QAction::Trigger, self=true)
    at widgets/qmenu.cpp:1120
#21 0x45ee4886 in QMenu::mouseReleaseEvent (this=0x844f198, e=0xbfffdf54) at widgets/qmenu.cpp:2351
#22 0x45a7cf5d in QWidget::event (this=0x844f198, event=0xbfffdf54) at kernel/qwidget.cpp:8361
#23 0x45ee32ec in QMenu::event (this=0x844f198, e=0xbfffdf54) at widgets/qmenu.cpp:2460
#24 0x45a22134 in notify_helper (e=0xbfffdf54, receiver=0x844f198, this=0x80d0f30) at kernel/qapplication.cpp:4550
#25 QApplicationPrivate::notify_helper (this=0x80d0f30, receiver=0x844f198, e=0xbfffdf54) at kernel/qapplication.cpp:4522
#26 0x45a282ca in QApplication::notify (this=0x80d0f30, receiver=0x844f198, e=0xbfffdf54) at kernel/qapplication.cpp:4093
#27 0x4225a73a in Gui::GUIApplication::notify (this=0xbfffe900, receiver=0x844f198, event=0xbfffdf54)
    at Application.cpp:1443
#28 0x44d295fe in QCoreApplication::notifyInternal (this=0xbfffe900, receiver=0x844f198, event=0xbfffdf54)
    at kernel/qcoreapplication.cpp:876
#29 0x45a23106 in sendEvent (event=<optimized out>, receiver=<optimized out>)
    at ../../src/corelib/kernel/qcoreapplication.h:231
#30 QApplicationPrivate::sendMouseEvent (receiver=0x844f198, event=0xbfffdf54, alienWidget=0x0, nativeWidget=0x844f198,
    buttonDown=0x463aeed4, lastMouseReceiver=..., spontaneous=true) at kernel/qapplication.cpp:3161
#31 0x45aad5cc in QETWidget::translateMouseEvent (this=0x844f198, event=0xbfffe40c) at kernel/qapplication_x11.cpp:4454
#32 0x45aabe4d in QApplication::x11ProcessEvent (this=0xbfffe900, event=0xbfffe40c) at kernel/qapplication_x11.cpp:3641
#33 0x45ad6e05 in x11EventSourceDispatch (s=0x817f548, callback=0, user_data=0x0)
    at kernel/qguieventdispatcher_glib.cpp:148
#34 0x43d6c62f in g_main_dispatch (context=0x8191e20) at gmain.c:2441
#35 g_main_context_dispatch (context=0x8191e20) at gmain.c:3011
#36 0x43d6cd70 in g_main_context_iterate (context=0x8191e20, block=1138210832, dispatch=1, self=0x80d0e80) at gmain.c:3089
#37 0x43d6d01f in g_main_context_iteration (context=0x8191e20, may_block=1) at gmain.c:3152
#38 0x44d5c2b8 in QEventDispatcherGlib::processEvents (this=0x816a8a8, flags=...) at kernel/qeventdispatcher_glib.cpp:424
#39 0x45ad6a9b in QGuiEventDispatcherGlib::processEvents (this=0x816a8a8, flags=...)
    at kernel/qguieventdispatcher_glib.cpp:207
#40 0x44d284ee in QEventLoop::processEvents (this=0xbfffe714, flags=...) at kernel/qeventloop.cpp:149
#41 0x44d28799 in QEventLoop::exec (this=0xbfffe714, flags=...) at kernel/qeventloop.cpp:204
#42 0x44d2d93b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1148
#43 0x45a1ff35 in QApplication::exec () at kernel/qapplication.cpp:3811
#44 0x42257b66 in Gui::Application::runApplication () at Application.cpp:1659
#45 0x0804d40a in main (argc=1, argv=0xbfffecf4) at MainGui.cpp:349
(gdb)

wmayer

2012-03-08 15:54

administrator   ~0001726

So, again what is your exact Qt version (of course version 4)? It seems the implementation of QSharedPointer has changed or a bug was inserted there.

In StdCmdAbout::activated() you can try this code snippet:
const Gui::Dialog::AboutDialogFactory* f = Gui::Dialog::AboutDialogFactory::defaultFactory();
QSharedPointer <QDialog> dlg = QSharedPointer<QDialog>(f->create(getMainWindow()));
dlg->exec();

wmayer

2012-03-08 16:18

administrator   ~0001727

According to http://blog.codef00.com/2011/12/15/not-so-much-fun-with-qsharedpointer/ the use of QSharedPointer is a bit weird.

If the above suggestion fails too then simply write:
const Gui::Dialog::AboutDialogFactory* f = Gui::Dialog::AboutDialogFactory::defaultFactory();
QDialog* dlg = f->create(getMainWindow());
dlg->exec();
delete dlg;

djreichel

2012-03-10 00:41

reporter   ~0001734

>>So, again what is your exact Qt version (of course version 4)? It seems the
>>implementation of QSharedPointer has changed or a bug was inserted there.
>>In StdCmdAbout::activated() you can try this code snippet:
>>const Gui::Dialog::AboutDialogFactory* f =
  Gui::Dialog::AboutDialogFactory::defaultFactory();
>>QSharedPointer <QDialog> dlg = QSharedPointer<QDialog
  (f->create(getMainWindow()));
>>dlg->exec();

Fedora 16 is using Qt 4.5, but also includes certain Qt3 components for backwards compatibility.

Here's the backtrace using the above snippet:
#6 0x44c08df9 in qFatal (msg=0x44dd3368 "QSharedPointer: pointer %p already has reference counting")
    at global/qglobal.cpp:2481
#7 0x44c5ba2f in QtSharedPointer::ExternalRefCountData::setQObjectShared (this=0x8378e78, obj=0x8a42d80)
    at tools/qsharedpointer.cpp:1242
#8 0x4848a34b in QtSharedPointer::ExternalRefCount<QDialog>::internalFinishConstruction (this=0xbfffd544, ptr=0x8a42d80)
    at /usr/include/QtCore/qsharedpointer_impl.h:381
#9 0x4848a269 in QtSharedPointer::ExternalRefCount<QDialog>::internalConstruct (this=0xbfffd544, ptr=0x8a42d80)
    at /usr/include/QtCore/qsharedpointer_impl.h:357
#10 0x4848a1c5 in QtSharedPointer::ExternalRefCount<QDialog>::ExternalRefCount (this=0xbfffd544, ptr=0x8a42d80)
    at /usr/include/QtCore/qsharedpointer_impl.h:391
#11 0x4848a076 in QSharedPointer<QDialog>::QSharedPointer (this=0xbfffd544, ptr=0x8a42d80)
    at /usr/include/QtCore/qsharedpointer_impl.h:473
#12 0x48488301 in StdCmdAbout::activated (this=0x82ebb90, iMsg=0) at CommandStd.cpp:229
#13 0x484785e4 in Gui::Command::invoke (this=0x82ebb90, i=0) at Command.cpp:282
#14 0x4843dd54 in Gui::Action::onActivated (this=0x866c1a8) at Action.cpp:82
#15 0x484429ac in Gui::Action::qt_static_metacall (_o=0x866c1a8, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0xbfffd6f8)
    at moc_Action.cpp:50
#16 0x44d3eea1 in QMetaObject::activate (sender=0x859fc28, m=0x463918d8, local_signal_index=1, argv=0xbfffd6f8)
    at kernel/qobject.cpp:3547
#17 0x45a1b15e in QAction::triggered (this=0x859fc28, _t1=false) at .moc/release-shared/moc_qaction.cpp:277
#18 0x45a1b3fb in QAction::activate (this=0x859fc28, event=QAction::Trigger) at kernel/qaction.cpp:1257
#19 0x45edac9c in QMenuPrivate::activateCausedStack (this=0x8614f48, causedStack=..., action=0x859fc28, action_e=
    QAction::Trigger, self=true) at widgets/qmenu.cpp:1028
#20 0x45ee1b6f in QMenuPrivate::activateAction (this=0x8614f48, action=0x859fc28, action_e=QAction::Trigger, self=true)
    at widgets/qmenu.cpp:1120
#21 0x45ee4886 in QMenu::mouseReleaseEvent (this=0x8675eb8, e=0xbfffdf34) at widgets/qmenu.cpp:2351

djreichel

2012-03-10 01:17

reporter   ~0001735

const Gui::Dialog::AboutDialogFactory* f =
  Gui::Dialog::AboutDialogFactory::defaultFactory();
QDialog* dlg = f->create(getMainWindow());
dlg->exec();
delete dlg;

The snippet (above) without QSharedPointer works fine.

wmayer

2012-03-11 08:39

administrator   ~0001738

The use of QSharedPointer is really weird. An alternative might be QScopedPointer but that is not part of Qt 4.5.
Thus, I decided to use boost::scoped_ptr. I could also the raw pointer as in my last example but in case the dialog throws an exception I get a memory leak.

wmayer

2012-03-11 08:53

administrator   ~0001739

Fixed in git 04cdad1db4227bc52cda1b71eefd1ed85e8e9e75

Issue History

Date Modified Username Field Change
2012-03-04 00:06 djreichel New Issue
2012-03-04 08:33 wmayer Note Added: 0001706
2012-03-04 08:43 wmayer Note Added: 0001707
2012-03-04 14:45 djreichel Note Added: 0001710
2012-03-04 15:25 wmayer Note Added: 0001711
2012-03-05 02:06 djreichel Note Added: 0001712
2012-03-06 06:19 wmayer Note Added: 0001715
2012-03-06 11:32 djreichel Note Added: 0001716
2012-03-08 11:42 djreichel Note Added: 0001725
2012-03-08 15:54 wmayer Note Added: 0001726
2012-03-08 16:18 wmayer Note Added: 0001727
2012-03-08 16:22 wmayer Relationship added related to 0000594
2012-03-10 00:41 djreichel Note Added: 0001734
2012-03-10 01:17 djreichel Note Added: 0001735
2012-03-11 08:39 wmayer Note Added: 0001738
2012-03-11 08:53 wmayer Note Added: 0001739
2012-03-11 08:53 wmayer Status new => closed
2012-03-11 08:53 wmayer Resolution open => fixed
2012-03-11 08:53 wmayer Fixed in Version => 0.13
2012-09-19 10:44 wmayer Relationship added has duplicate 0000838